2013-11-28 135 views
0

查看XML element contet的定義及其定義CharData允許在XML元素的內容中

[43] content ::= CharData? ((element | Reference | CDSect | PI | Comment) CharData?)* 

[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*) 

我注意到,CharData的這個定義並不禁止具有XML元素內>字符。我假定這是錯誤所以我看着CharData的描述(重點煤礦)

與符號字符(&)和左尖括號(<)不能 出現在他們的文字形式,如使用時除外標記分隔符, 或在註釋,處理指令或CDATA部分中。如果 它們在其他地方需要,它們必須分別使用數字 字符引用或字符串「&amp;」和「&lt;」進行轉義。 直角括號(>)可以使用字符串 &gt;表示,而且必須爲兼容性,使用轉義或者「&gt;」或 一個字符引用當它出現在字符串中「]] >「的內容, 該字符串不標記CDATA節的末尾時。

所以看來,[14]和CharData的定義是不一致的。這個假設是正確的還是解析器允許>內部元素沒有逃脫它?或者他們會自動逃脫它?

回答

2

字符>實際上允許在xml內不轉義,但字符序列]]>不是。

MAY逃避任何>字符作爲&gt;,但你MUST這樣做,如果它是上述順序,即序列]]&gt;(或字符引用的當量)的部分是正確的方式來當它不用作CDATA節的結束標記時,用xml表示該字符序列。

+0

所以我可以在技術上寫'?>'?這似乎很奇怪。我假定規範沒有說是,那是被禁止的。 –

+1

是的,'?>'是有效的xml。 –

+1

由於這個問題正在故意挑剔有關規範,我會指出'?>'的確是_well-formed_,但我們不知道它是否有效,除非我們有一個DTD。 –