cwrsync設定

cwrsync 一套支援windows平台上rsync的軟體

官網

https://www.itefix.no/i2/cwrsync

經測試,可在windows平台上作client備份

安裝完後會有ㄧ個批次檔,每天固定時間執行就好

例:將磁碟機E槽的資料整個備份至網域名稱xxx.xxx.xxx.xxx 模組名稱[module_name]

rsync -a –port 873 /cygdrive/e [xxx.xxx.xxx]::[module_name]

也可以跑ssh

例:

rsync -a /cygdrive/e ‘ssh -p 22’ [user@xxx.xxx.xxx.xxx]:~/[directory path]

另,隱藏背景執行

新增ㄧ副檔名為.vbs檔,貼入以下內容,則可背景執行

Set WshShell = WScript.CreateObject(“WScript.Shell”)
WshShell.Run “c:\windows\runbackup.bat”, 0
Set WshShell = Nothing

[轉]如何作碩士論文研究

http://www.cs.nccu.edu.tw/~ttsai/master/howtodo_masterthesis.htm

如何作碩士論文研究

91.3.14

步驟 說明 預估時程 重要點之

建議時間

Paper survey and

Proposal preparation

1.     至少精選20篇以上papers細讀

2.     多與指導教授討論”paper內容”與”研究方向”

3.     group meeting時,必須仔細聽別人的paper presentations可事半功倍

1. 時期長短不一,視各人的background而定

2. 一般至少3個月~9個月

3. 從入學該年7月~次年1月(參考用)

 

Proposal abstract

包括研究之

1.    背景與目的

2.    方法與步驟

3.     預計成果和時程

通過必要條件:研究目標明確且具意義,方法必須具體可行

1. 研二第一學期開學時提出(依系上規定時程提出)

2. 一般來講系上的deadline是最遲提出時限,最好自己的進度是遠超前的,否則進度會是相當趕的,想如期6月畢業幾乎是不可能的任務!!

研一暑假前

約6, 7月

Research steps 1.     algorithm development (需再次survey相關paper)

2.     coding for simulation or/and numerical analysis by maths

3.     justify correctness of results

4.     modify alg. and coding to have good results (通常需有比較之對照組)

1. 四個步驟應該會反複數次,因為必須反複調整演算法或程式,直到結果是正確有意義的,且比別的方法改進一定的程度

2. 時程上一般至少6個月,每個步驟至少1個月

3. 最遲要研二下學期開學前完成

研二寒假前完成

約1月

Thesis outline 檢驗看缺少什麼還需補作的,以求論文完整性 通常還需補正的東西要3個月 約2月
Progress report and

presentation

Progress report要有個presentation, 通過後才算完成此階段

通過必要條件:必須要有好的結果,不是只要有進度就行了!!

研二第二學期開學時提出(依系上規定時程提出)

必須自行在deadline前2星期內在group meeting排定presentation

約2月
Submit paper 必須要有paper submission到有經審查的會議上獲得通過,才可畢業 通常要1個月  
Paper presentation 會議發表論文之預演 必須自行在會議2星期前在group meeting中預演  
Oral exam committee and schedule 排定口試委員名單及口試時間 必須在口試日期1個月前向系上提出(正確時程以系上為主) 約5月
Thesis draft & dry run 論文初稿寄給口試委員

並在group meeting中預演至少2次

寫論文通常要之前(progress report時)就陸陸續續規劃,到初稿完成時可能還需至少1個月的checking和補作一些結果 約5月
Oral exam 口試當天安排接洽口試委員事宜, 點心茶點

各委員各有一份論文,與投影片和評分表等

  約6月
Thesis modifications 根據各口試委員意見作最後的論文修訂,必要時必須再將最後論文版本寄給各委員,以再次確認是否通過 通常要1個月  
Format check 論文格式審核與付印裝訂

並給指導老師數份

   
Thesis hand-in 繳交論文與學校,系上    

[轉]Linux下使用fdupes删除指定目錄下重複文件

http://gislite.net/631.html

 

摘要: 我们怎么使用SEHLL 和命令行去删除 指定目录下的重复文件?我们怎么删除不同目录下重复的文件?我们将使用一个工具:fdupes ,它会查找和删除指定目录的重复文件,它通过文件的大小和MD5值进行比较 。一个字节一个字节进行对比。fdupes是一个删除指定目录…

我们怎么使用SEHLL 和命令行去删除 指定目录下的重复文件?我们怎么删除不同目录下重复的文件?我们将使用一个工具:fdupes ,它会查找和删除指定目录的重复文件,它通过文件的大小和MD5值进行比较 。一个字节一个字节进行对比。fdupes是一个删除指定目录下重复文件的好工具。

安装fdupes

如果你使用debian/ubuntu linux

# apt-get install fdupes

如果你使用 redhat/rhel/fedota/centos 你可以使用rpm包安装或yum

rpm : http://www.cyberciti.biz/faq/rhel-centos-fedora-media-mp3-players-installtion/
yum install fdupes

fdupes 怎么工作?

在 /etc目录查找重复文件

#fdupes /etc

结果

/etc/vimrc
/etc/virc

删除不需要的文件? (用此可以查找磁盘上多余的文件–当空间不足时)

测试一下:

cp /etc/vimrc /etc/virc /tmp/test

# fdupes -d /tmp/a/

[1] /tmp/a/vimrc
[2] /tmp/a/virc

Set 1 of 1, preserve files [1 – 2, all]: 1

[+] /tmp/a/vimrc
[-] /tmp/a/virc

(只选择删除其中一个,保留一个)

再查找一下

# fdupes /tmp/a/

查找结果为空

递归查询命令: -r

exp: fdupes -r /etc/ /data/etc/

查看重复文件的大小

# fdupes -S /etc

1533 bytes each:
/etc/vimrc
/etc/virc

更多命令见:man page fdupes

与Sed 结合 删除一些不必要的文件 :

fdupes -r -n -S /directory | sed -r “s/^/#rm ”/” | sed -r “s/$/”/” >duplicate-files.sh

如何執行批次檔並隱藏(背景執行)

1.隱藏執行

說是隱藏,其實是沒有顯示前景視窗而已,應稱為背景執行,在工作管理員裡可以看到process。使用Windows Script達此目的:

建立一檔案run.vbs

編輯它

Set ws = CreateObject(“Wscript.Shell”)
ws.run “cmd /c c:\run.bat”,vbhide

ws.run “c:\run.bat” ,0

2.縮小執行

若有輸出結果,則可用縮小至工作列的方式,這與上面的方式都要寫另外一支的批次檔來呼叫執行。

cmd /c start /min c:\run.bat

Rsync設定詳說

Rsync on debian

 

rsync 官方網站

Rsync 在網路上有不少教學文件,但它在不同的作業系統上或者是不同的 linux 版本上的設定,多少都有一些差異,所以你若在不同的系統環境下你要完全照著教學作,經常會設定不起來,因此就要理解其原理,比照相對的位置去設定才行。尤其是 debian 的設定方法經常都跟 redhat、fedora系列的不一樣,而台灣用 debian 的人又少,因此設定上若沒找到教學文件的話,自己設起來是挺困難的。

底下介紹的是 Rsync 安裝在 debian 5.0 lenny 的教學,透過遠端網路和加密碼認証備份,從而實現異地備援的效果。 ubuntu 系統也適用此設定 (應該是吧,我猜的)

 

(1).安裝 rsync (兩端都需設定)

apt-get install rsync

(2).設定 rsync 常駐 (僅server端需設定)

vim /etc/default/rsync

將 RSYNC_ENABLE=false
改 RSYNC_ENABLE=true

要改其它 port 的話,同樣在此檔,找到 RSYNC_OPTS=’ ‘ 改寫如下

RSYNC_OPTS=’–port=8730′

 

(3).設定 rsync server 設定檔 (僅server端需設定)
cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/rsyncd.conf

vim /etc/rsyncd.conf

————————- /etc/rsyncd.conf 設定範例1 ————————————

# MODULE OPTIONS

[system]
#↑此為模組名稱,最好不要打中文,容易出錯,模組名稱是用來備份時的代號

comment = 整個系統備份
#↑ 這行只是文字說明而已
path = /
#↑設定此模組 system 的路徑
use chroot = no
#↑變更啟始路徑
max connections=2
#↑最大連線數
lock file = /var/lock/rsyncd
read only = yes
#↑唯讀
list = yes
uid = root
gid = root
# 設定執行rsync時的身份為何
# exclude =
#↑設定排除檔案和目錄
# exclude from =
#↑設定排除檔案和目錄的清單從某個檔案讀進來
# include =
# include from =
auth users = user1
#↑設定可連進來的使用者帳號,此 user1 的帳密必須寫在底下 rsyncd.secrets 這個檔(若沒有auth users此項則 anonymous可登入)
secrets file = /etc/rsyncd.secrets
#↑帳密檔設定,此檔必須設為 chmod 600, root 專有的屬性,否則會報錯
strict modes = yes
# hosts allow =
# hosts deny =
ignore errors = no
ignore nonreadable = yes
transfer logging = no
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
#不要對有以上列出附檔名之檔案做壓縮。

————————- /etc/rsyncd.conf 設定範例1 ————————————

————————- /etc/rsyncd.conf 設定範例2 ————————————

# GLOBAL OPTIONS 全域設定

pid file=/var/run/rsyncd.pid
use chroot = no
max connections=2
lock file = /var/lock/rsyncd
read only = yes
list = yes
uid = root
gid = root
auth users = user1
secrets file = /etc/rsyncd.secrets
strict modes = yes
ignore errors = no
ignore nonreadable = yes
transfer logging = no
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

 

# MODULE OPTIONS 模組設定

[MCxxxx]
comment = mysql備份
path = /var/lib/mysql/MCxxxx
[MGxxxx]
path = /var/lib/mysql/MGxxxx

[html]
comment = 公用程式
path = /var/www/html
[inc]
comment = 公用程式
path = /var/www/includes

[suitetpe]
comment = 客戶1
path = /var/www/customers/webs/suitetpe
[tecofound]
comment = 客戶2
path = /var/www/customers/webs/tecofound

————————- /etc/rsyncd.conf 設定範例2 ————————————

每次改完以上設定檔,需重啟 rsync 才能載入新的設定值,重啟指令

/etc/init.d/rsync restart

 

(4).設定密碼檔 (兩端都需設定)

echo “user1:password” > /etc/rsyncd.secrets
echo “password” > /etc/rsyncd.pw
chmod 600 /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.pw
chown root:root /etc/rsyncd.secrets
chown root:root /etc/rsyncd.pw

說明:rsyncd.secrets 此檔內容的格式為 帳號:密碼

rsyncd.pw 此檔內容只存密碼

 

(5).設定備份指令 (僅 client 端需設定)

將以下內容寫成一個 script 檔,放入 crontab 去定時執行

———————-備份指令設定範例1——————————————————————————-

rsync -aHDStv –password-file=/etc/rsyncd.pw –delete –exclude=/proc/* –exclude=/sys/* –exclude=/tmp/* –exclude=/mnt/* –exclude=/etc/proftpd/proftpd.conf –exclude=/etc/udev/rules.d/70-persistent-net.rules –exclude=/etc/network/interfaces –exclude=/etc/hosts –exclude=/etc/hostname –exclude=/root/iptables.sh –exclude=/selinux/* –exclude=/dev/* –exclude=/etc/cron.d/remotebakuser1@192.168.0.33::system /

———————-備份指令設定範例1——————————————————————————-

———————-備份指令設定範例2——————————————————————————-

#mysql 的2個資料庫備份
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::MCxxxx/var/lib/mysql/MCxxxx
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::MGxxxx/var/lib/mysql/MGxxxx

#公用程式同步
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::html/var/www/html
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::inc/var/www/includes

#客戶網站目錄同步
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::tecofound/var/www/customers/webs/tecofound
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::suitetpe/var/www/customers/webs/suitetpe

———————-備份指令設定範例2——————————————————————————-

簡要說明:
rsync 參數 –指定密碼檔 –delete(刪除) –exclude=排除檔案或目錄 來源(語法為:帳號@IP或域名::模組名稱) 目地

詳細參數說明:

-a, –archive 權限保存模式
-H, –hard-links 保留硬式連結
-D, –devices 保留device資訊(root only)
-S, –sparse 嘗試去處理稀疏的檔案,讓這些檔案在目的端佔去較少的磁碟空間.
-t, –times 保留時間點
-v , –verbose 複雜的輸出訊息,若要在背景執行請拿掉此參數

–password-file=/etc/rsyncd.pw –delete 指定密碼檔
–delete 刪除server端已經不存在,而client端存在的檔案

rsync 例外檔 (不要同步備份的檔案或目錄)

這裡要說明的是,設定範例1的部份,因為我是幾乎整個系統的備份,而我的系統上面又有啟動selinux,所以要排除的檔案有很多,這部份可以你自己的需求去慢慢測試排除的檔案 (設定範例2,就沒有那麼麻煩,只針對幾個目錄的備份,故沒有那麼多要排除的檔案)

–exclude=/etc/proftpd/proftpd.conf
#↑因為裡面有不同的 hostname 對應
–exclude=/etc/udev/rules.d/70-persistent-net.rules
#↑因不同的網卡 mac address 對應
–exclude=/etc/network/interfaces
#↑因不同的IP設定
–exclude=/root/iptables.sh
#↑因在 iptables.sh 內有關閉 eth0 指令
–exclude=/etc/hosts
#↑因不同的 localhost 對應
–exclude=/etc/hostname
#↑因為不同的 hostname 設定
–exclude=/selinux/*
–exclude=/dev/*
#↑因權限問題而無法備份
–exclude=/etc/cron.d/remotebak
#↑因為只要vh2去同步vh1即可,故 vh1 上不需要有此檔

 


rsync設定檔詳解

對於rsync服務器來說,最重要和複雜的就是它的配置了。rsync服務器的配置文件為/etc/rsyncd.conf,其控制認證、訪問、日誌記錄等等。

該文件是由一個或多個模組結構組成。一個模組定義以方括弧中的模組名開始,直到下一個模組定義開始或者文件結束,模組中包含格式為name = value的參數定義。每個模組其實就對應需要備份的一個目錄樹,比方說在我們的實例環境中,有三個目錄樹需要備份:/www/、 /home/web_user1/和/home/web_user2/,那麼就需要在配置文件中定義三個模組,分別對應三個目錄樹。

配置文件是行為單位的,也就是每個新行都表示一個新的註釋、模組定義或者參數賦值。以#開始的行表示註釋,以””結束的行表示下面一行是該行的繼續。參數賦值中等號後可能是一個大小寫不敏感的字符串、一個以trure/false表示的布爾值。

全局參數

在文件中[modlue]之前的所有參數都是全局參數,當然也可以在全局參數部分定義模組參數,這時候該參數的值就是所有模組的預設值。

motd file

“motd file”參數用來指定一個消息文件,當客戶連接服務器時該文件的內容顯示給客戶,預設是沒有motd文件的。

log file

“log file”指定rsync的日誌文件,而不將日誌發送給syslog。

pid file

指定rsync的pid文件。

syslog facility

指定rsync發送日誌消息給syslog時的消息級別,常見的消息級別是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。預設值是daemon。

模組參數

在全局參數之後就需要定義一個或多個模組了,模組中可以定義以下參數:

comment

給模組指定一個描述,該描述連同模組名在客戶連接得到模組列表時顯示給客戶。預設沒有描述定義。

path

指定該模組的供備份的目錄樹路徑,該參數是必須指定的。

use chroot

如果”use chroot”指定為true,那麼rsync在傳輸文件以前首先chroot到path參數所指定的目錄下。這樣做的原因是實現額外的安全防護,但是缺點是需要以roots權限,並且不能備份指向外部的符號連接所指向的目錄文件。預設情況下chroot值為true。

max connections

指定該模組的最大並發連接數量以保護服務器,超過限制的連接請求將被告知隨後再試。預設值是0,也就是沒有限制。

lock file

指定支持max connections參數的鎖文件,預設值是/var/run/rsyncd.lock。

read only

該選項設定是否允許客戶上載文件。如果為true那麼任何上載請求都會失敗,如果為false並且服務器目錄讀寫權限允許那麼上載是允許的。預設值為true。

list

該選項設定當客戶請求可以使用的模組列表時,該模組是否應該被列出。如果設置該選項為false,可以創建隱藏的模組。預設值是true。

uid

該選項指定當該模組傳輸文件時守護進程應該具有的uid,配合gid選項使用可以確定哪些可以訪問怎麼樣的文件權限,預設值是”nobody”。

gid

該選項指定當該模組傳輸文件時守護進程應該具有的gid。預設值為”nobody”。

exlude

用來指定多個由空格隔開的多個模式列表,並將其添加到exclude列表中。這等同於在客戶端命令中使用–exclude來指定模式,不過配置文件中指定的exlude模式不會傳遞給客戶端,而僅僅應用於服務器。一個模組只能指定一個exlude選項,但是可以在模式前面使用”-“和”+”來指定是exclude還是include。

但是需要註意的一點是該選項有一定的安全性問題,客戶很有可能繞過exlude列表,如果希望確保特定的文件不能被訪問,那就最好結合uid/gid選項一起使用。

exlude from

指定一個包含exclude模式的定義的文件名,服務器從該文件中讀取exlude列表定義。

include

用來指定多個由空格隔開的多個rsync並應該exlude的模式列表。這等同於在客戶端命令中使用–include來指定模式,結合 include和exlude可以定義複雜的exlude/include規則。一個模組只能指定一個include選項,但是可以在模式前面使用”-“和”+”來指定是exclude還是include。

include from

指定一個包含include模式的定義的文件名,服務器從該文件中讀取include列表定義。

auth users

該選項指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模組。這裡的用戶和系統用戶沒有任何關係。如果”auth users”被設置,那麼客戶端發出對該模組的連接請求以後會被rsync請求challenged進行驗證身份這裡使用的 challenge/response認證協議。用戶的名和密碼以明文方式存放在”secrets file”選項指定的文件中。預設情況下無需密碼就可以連接模組(也就是匿名方式)。

secrets file

該選項指定一個包含定義用戶名:密碼對的文件。只有在”auth users”被定義時,該文件才有作用。文件每行包含一個username:passwd對。一般來說密碼最好不要超過8個字符。沒有預設的 secures file名,需要限式指定一個。(例如:/etc/rsyncd.secrets)

strict modes

該選項指定是否監測密碼文件的權限,如果該選項值為true那麼密碼文件只能被rsync服務器運行身份的用戶訪問,其他任何用戶不可以訪問該文件。預設值為true。

hosts allow

該選項指定哪些IP的客戶允許連接該模組。客戶模式定義可以是以下形式:

o xxx.xxx.xxx.xxx,客戶主機只有完全匹配該IP才允許訪問。例如:192.167.0.1

o a.b.c.d/n,屬於該網絡的客戶都允許連接該模組。例如:192.168.0.0/24

o a.b.c.d/e.f.g.h,屬於該網絡的客戶都允許連接該模組。例如:192.168.0.0/255.255.255.0

o 一個主機名,客戶主機只有擁有該主機名才允許訪問,例如:backup.linuxaid.com.cn。

o *.linuxaid.com.cn,所有屬於該域的主機都允許。

預設是允許所有主機連接。

hosts deny

指定不允許連接rsync服務器的機器,可以使用hosts allow的定義方式來進行定義。預設是沒有hosts deny定義。

ignore errors

指定rsyncd在判斷是否運行傳輸時的刪除操作時忽略server上的IP錯誤,一般來說rsync在出現IO錯誤時將將跳過–delete操作,以防止因為暫時的資源不足或其它IO錯誤導致的嚴重問題。

ignore nonreadable

指定rysnc服務器完全忽略那些用戶沒有訪問權限的文件。這對於在需要備份的目錄中有些文件是不應該被備份者得到的情況是有意義的。

transfer logging

使rsync服務器使用ftp格式的文件來記錄下載和上載操作在自己單獨的日誌中。

log format

通過該選項用戶在使用transfer logging可以自己定制日誌文件的字段。其格式是一個包含格式定義符的字符串,可以使用的格式定義符如下所示:

o %h 遠程主機名

o %a 遠程IP地址

o %l 文件長度字符數

o %p 該次rsync會話的進程id

o %o 操作類型:”send”或”recv”

o %f 文件名

o %P 模組路徑

o %m 模組名

o %t 當前時間

o %u 認證的用戶名(匿名時是null)

o %b 實際傳輸的字節數

o %c 當發送文件時,該字段記錄該文件的校驗碼

預設log格式為:”%o %h [%a] %m (%u) %f %l”,一般來說,在每行的頭上會添加”%t [%p] “。在源代碼中同時發佈有一個叫rsyncstats的perl腳本程序來統計這種格式的日誌文件。

timeout

通過該選項可以覆蓋客戶指定的IP超時時間。通過該選項可以確保rsync服務器不會永遠等待一個崩潰的客戶。超時單位為秒鐘,0表示沒有超時定義,這也是預設值。對於匿名rsync服務器來說,一個理想的數字是600。

refuse options

通過該選項可以定義一些不允許客戶對該模組使用的命令參數列表。這裡必須使用命令全名,而不能是簡稱。但發生拒絕某個命令的情況時服務器將報告錯誤信息然後退出。如果要防止使用壓縮,應該是:”dont compress = *”。

dont compress

用來指定那些不進行壓縮處理再傳輸的文件,預設值是

*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

主機板規格比較

參考維基百科,擷取我需要的部分

http://zh.wikipedia.org/wiki/%E4%B8%BB%E6%A9%9F%E6%9D%BF%E8%A6%8F%E6%A0%BC%E6%AF%94%E8%BC%83

 

規格 尺寸 (mm)
WTX 356×425
AT 350×305
Baby-AT 330×216
BTX 325×266
ATX 305×244
EATX 305×330
LPX 330×229
NLX 254×228
microATX 244×244
DTX 244×203
FlexATX 229×191
Mini-DTX 203×170
EBX 203×146
microATX 171×171
Mini-ITX 170×170
EPIC 165×115
ESM 149×71
Nano-ITX 120×120
COM Express 125×95
ESMexpress 125×95
ETX / XTX 114×95
Pico-ITX 100×72
PC/104 96×90
mobile-ITX 75×45
Ultra ATX ?×244

資料庫的ACID

記得好像某個考試有考ACID,參考維基百科

http://zh.wikipedia.org/wiki/ACID

 

ACID,是指資料庫管理系統DBMS)在寫入/異動資料的過程中,為保證交易(transaction)是正確可靠的,所必須具備的四個特性:原子性(atomicity,或稱不可分割性)、一致性(consistency)、隔離性(isolation,又稱獨立性)、持久性(durability)。

主要有四大特性

  • 原子性:一個事務(transaction)中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
  • 一致性:在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及後續資料庫可以自發性地完成預定的工作。
  • 隔離性:當兩個或者多個事務並發訪問(此處訪問指查詢和修改的操作)資料庫的同一數據時所表現出的相互關係。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和串列化(Serializable)。
  • 持久性:在事務完成以後,該事務對資料庫所作的更改便持久地保存在資料庫之中,並且是完全的。

CDATA 區段 – XML 標準

XML 對於許多人都不陌生,但還是有些地方大家不知道該如何使用,例如現在所要介紹的 CDATA 區段。

在某些時候內容中含有 HTML 標籤或者是一些特殊字元﹙如﹕<、>、&﹚,當這些字元出現在內容裡,通常都會出現 XML 分析錯誤的情況,這時候就必須將這些字元作些轉換的工作(如︰< / &lt;、> / &gt;、& / &amp;)。

其實並不需要如此,CDATA 區段提供了一種通知剖析器的方法,說明 CDATA 區段所包含的字元沒有標記。

當 XML 剖析器遇到開頭的『<![CDATA[』,會將接下來的內容報告成字元,而不會嘗試將其解譯成項目或實體標籤。字元參考不能在 CDATA 區段內運作。當它遇到結尾的『]]>』時,剖析器會停止報告並回到正常的剖析,這也能使用在 HTML 文件中。使用方法為︰

  1. <![CDATA[這裡面內容包含了 <font size=”3″>HTML 標籤</font>,以前一些特殊字元 & 所以要使用 CDATA 區段包起來]]>

以下面商品資料文件 PDI0120080331195202.xml 為範例,其中 PDI01DOC.DocContent.Item.ProductUrl 為商品頁面的網址,內容包含了 & 字元;PDI01DOC.DocContent.Item.ProductDesc 為商品說明,內容包含了大量 HTML 標籤。所以這兩個內容我們都用使用了 CDATA 區段包起來,如此 XML 剖析器就能正常剖析了。