2013-11-28 78 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。 –