不合法的XML字符必須被替換爲相應的實體。
如果在XML文檔中使用類似"<" 的字符, 那麼解析器將會出現錯誤,因爲解析器會認爲這是一個新元素的開始。所以不應該象下面那樣書寫代碼:
<message>if salary < 1000 then</message> |
爲了避免出現這種情況,必須將字符"<" 轉換成實體,象下面這樣:
<message>if salary 1000 then</message> |
下面是五個在XML文檔中預定義好的實體:
< | < | 小於號 |
> | > | 大於號 |
& | & | 和 |
' | ' | 單引號 |
" | " | 雙引號 |
實體必須以符號"&"開頭,以符號";"結尾。
注意: 只有"<" 字符和"&"字符對於XML來說是嚴格禁止使用的。剩下的都是合法的,爲了減少出錯,使用實體是一個好習慣。
CDATA部件
在CDATA內部的所有內容都會被解析器忽略。
如果文本包含了很多的"<"字符和"&"字符——就象程序代碼一樣,那麼最好把他們都放到CDATA部件中。
一個 CDATA 部件以"<![CDATA[" 標記開始,以"]]>"標記結束:
<script> function matchwo(a,b) { if (a < b && a < 0) then { return 1 } else { return 0 } } </script> |
在前面的例子中,所有在CDATA部件之間的文本都會被解析器忽略。
CDATA注意事項:
CDATA部件之間不能再包含CDATA部件(不能嵌套)。如果CDATA部件包含了字符"]]>" 或者"<![CDATA[" ,將很有可能出錯哦。
同樣要注意在字符串"]]>"之間沒有空格或者換行符。
==========================================================================================
RSS中出現了一些麻煩的字符,比如 &,®,™ 等。這些字符放到XML中,如果不做特殊處理,就會有錯誤產生。比如下面的XML:
<item>&</item>
在IE 瀏覽器,以及一些解析用的DOM中解析這個片段,就會產生錯誤。
在W3C的技術規範中,也可以看到這樣的字符不允許出現:
http://www.w3.org/TR/2001/REC-xml-c14n-20010315
比如:對 Text Nodes 允許的字符有如下要求: the string value, except all ampersands are replaced by &, all open angle brackets (< ) are replaced by <, all closing angle brackets (> ) are replaced by >, and all #xD characters are replaced by 
.
由於這些特殊字符比較多,我們在XML中替換的工作量比較大,我們可以在DTD文件中作些定義:
比如DTD文件中增加以下部分:
<!-- PERCENT SIGN -->
<!ENTITY amp "&#38;">
<!-- COPYRIGHT SIGN -->
<!ENTITY reg "®">
<!-- REG TRADE MARK SIGN -->
<!ENTITY trade "™">
並在XML中定義這個XML文件需要這個DTD支持:
<!DOCTYPE HeadCount SYSTEM "eula.dtd">
這樣在XML文件中出現 & ® ™ 這類特殊字符就不會再報錯了。
有關更多的特殊字符可以參看:
http://xml.coverpages.org/CourtDocument11-2002-05s-DTD.txt
那裏羅列的特殊字符有近200個。