<![CDATA[]]>和轉(zhuǎn)義字符

所有 XML 文檔中的文本均會被解析器解析。
只有 CDATA 區(qū)段(CDATA section)中的文本會被解析器忽略。

一、轉(zhuǎn)義字符

非法的 XML 字符必須被替換為實體引用(entity reference)。

在 XML 元素中,"<" 和 "&" 是非法的。

  • "<" 會產(chǎn)生錯誤,因為解析器會把該字符解釋為新元素的開始。
  • "&" 也會產(chǎn)生錯誤,因為解析器會把該字符解釋為字符實體的開始。

在 XML 中有 5 個預(yù)定義的實體引用:

參數(shù)名 類型 說明
&lt; < 小于
&gt; > 大于
&amp; & 和號
&apos; ' 省略號
&quot; " 引號

注釋:嚴格地講,在 XML 中僅有字符 "<"和"&" 是非法的。省略號、引號和大于號是合法的,但是把它們替換為實體引用是個好的習(xí)慣。

二、<![CDATA[]]>

<![CDATA[]]>這個標記所包含的內(nèi)容將表示為純文本,比如<![CDATA[<]]>表示文本內(nèi)容“<”。

此標記用于xml文檔中,我們先來看看使用轉(zhuǎn)義符的情況。我們知道,在xml中,”<”、”>”、”&”等字符是不能直接存入的,否則xml語法檢查時會報錯,如果想在xml中使用這些符號,必須將其轉(zhuǎn)義為實體,如”&lt;”、”&gt;”、”&amp;”,這樣才能保存進xml文檔。
  
在使用程序讀取的時候,解析器會自動將這些實體轉(zhuǎn)換回”<”、”>”、”&”。舉個例子:

  <age> age < 30 </age> 

上面這種寫法會報錯,應(yīng)該這樣寫:

  <age> age &lt; 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解析器忽略解析,所以更快。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容