查看XML element contet的定义及其CharData的定义。
[43] content ::= CharData? ((element | Reference | CDSect | PI | Comment) CharData?)*
[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
我注意到CharData的这个定义并不禁止在XML元素中包含>
个字符。我认为这是错误所以我看了CharData的描述(强调我的)
&符号(&amp;)和左尖括号(&lt;)不得 以字面形式出现,除非用作标记分隔符, 或在评论,处理指令或CDATA部分内。如果 它们在其他地方需要,它们必须使用数字进行转义 字符引用或字符串“
&
”和“<
”。 可以使用字符串表示右尖括号(&gt;) “>
”,并且为了兼容性,必须使用“>
”或 当它出现在字符串“]]&gt;中时的字符引用在内容上, 当该字符串未标记CDATA部分的结尾时。
所以似乎[14]和CharData的定义是不一致的。这个假设是正确的还是解析器允许在元素内>
而不转义它?或者他们会自动逃脱吗?
答案 0 :(得分:2)
事实上,在{x}}中允许使用字符>
而不进行转义,但字符序列]]>
不是。
您可能将任何>
字符转义为>
,但如果必须,则必须这样做,如果它是上述序列的一部分,即序列]]>
(或带有字符引用的等价物)是在xml中用作CDATA部分的结束标记时表示该字符序列的正确方法。