所有 XML 文檔中的文本均會被解析器解析。
只有 CDATA 區(qū)段(CDATA section)中的文本會被解析器忽略。
一、轉(zhuǎn)義字符
非法的 XML 字符必須被替換為實體引用(entity reference)。
在 XML 元素中,"<" 和 "&" 是非法的。
- "<" 會產(chǎn)生錯誤,因為解析器會把該字符解釋為新元素的開始。
- "&" 也會產(chǎn)生錯誤,因為解析器會把該字符解釋為字符實體的開始。
在 XML 中有 5 個預(yù)定義的實體引用:
| 參數(shù)名 | 類型 | 說明 |
|---|---|---|
< |
< | 小于 |
> |
> | 大于 |
& |
& | 和號 |
' |
' | 省略號 |
" |
" | 引號 |
注釋:嚴格地講,在 XML 中僅有字符 "<"和"&" 是非法的。省略號、引號和大于號是合法的,但是把它們替換為實體引用是個好的習(xí)慣。
二、<![CDATA[]]>
被<![CDATA[]]>這個標記所包含的內(nèi)容將表示為純文本,比如<![CDATA[<]]>表示文本內(nèi)容“<”。
此標記用于xml文檔中,我們先來看看使用轉(zhuǎn)義符的情況。我們知道,在xml中,”<”、”>”、”&”等字符是不能直接存入的,否則xml語法檢查時會報錯,如果想在xml中使用這些符號,必須將其轉(zhuǎn)義為實體,如”<”、”>”、”&”,這樣才能保存進xml文檔。
在使用程序讀取的時候,解析器會自動將這些實體轉(zhuǎn)換回”<”、”>”、”&”。舉個例子:
<age> age < 30 </age>
上面這種寫法會報錯,應(yīng)該這樣寫:
<age> age < 30 </age>
值得注意的是:
(1) 轉(zhuǎn)義序列字符之間不能有空格;
(2) 轉(zhuǎn)義序列必須以”;”結(jié)束;
(3) 單獨出現(xiàn)的”&”不會被認為是轉(zhuǎn)義的開始;
(4) 區(qū)分大小寫。
不管怎么樣,轉(zhuǎn)義前的字符也好,轉(zhuǎn)義后的字符也好,都會被xml解析器解析,為了方便起見,使用<![CDATA[]]>來包含不被xml解析器解析的內(nèi)容。但要注意的是:
(1) 此部分不能再包含”]]>”;
(2) 不允許嵌套使用;
(3) ”]]>”這部分不能包含空格或者換行。
最后,說說<![CDATA[]]>和xml轉(zhuǎn)移字符的關(guān)系,它們兩個看起來是不是感覺功能重復(fù)了?
是的,它們的功能就是一樣的,只是應(yīng)用場景和需求有些不同:
(1) <![CDATA[]]>不能適用所有情況,轉(zhuǎn)義字符可以;
(2) 對于短字符串<![CDATA[]]>寫起來啰嗦,對于長字符串轉(zhuǎn)義字符寫起來可讀性差;
(3) <![CDATA[]]>表示xml解析器忽略解析,所以更快。