有没有理由我们不能将未转义的&符号放在XML中

时间:2012-08-27 15:25:28

标签: xml

我的客户希望将我的xml文件写为<name>Smith & Jones</name>,而不是<name>Smith &amp; Jones</name>

我找不到讨论这个的质量参考。

4 个答案:

答案 0 :(得分:7)

来自XML specification (§2.4)

  

&符号(&amp;)和左尖括号(&lt;)仅在用作标记分隔符时或在注释,处理指令或CDATA部分中时才以其文字形式出现。它们在内部实体声明的字面实体价值内也是合法的;见&#34; 4.3.2形成良好的解析实体&#34;。如果在其他地方需要它们,则必须使用数字字符引用或字符串&#34;&amp;&#34;来转义它们。和&#34;&lt;&#34;分别

由于这种情况不属于所述类别,因此属于非法行为。

答案 1 :(得分:6)

使用CDDATA标记在XML标记中插入这些字符,而不用XML解析它们:

<name>Smith & Jones</name>

变为

<name><![CDATA[ Smith & Jones ]]></name>

这样你也可以使用简单的html和xml。

示例:http://www.w3schools.com/xml/xml_cdata.asp

答案 2 :(得分:3)

你不能,至少如果你想继续调用你的文件“XML”。 XML不允许使用未转义的&符号,任何符合标准的解析器都会拒绝将文件作为“格式不正确”的文件。

您可以使用CDATA,但这会引入其自身的丑陋,并且大多数序列化程序默认情况下不会生成CDATA。

答案 3 :(得分:2)

XML规范很清楚,这不是格式良好的XML。

如果你想知道为什么规范是这样编写的,那总是一个难以回答的问题。有时(但不是这次)Tim Bray在http://www.xml.com/axml/testaxml.htm的XML推荐的注释版本有所启发。有时(但不是这次)http://www.w3.org/TR/1998/REC-xml-19980210.xml规范的XML源中的注释和其他注释都是有启发性的。在没有这些线索的情况下,回想一下XML的创建者非常渴望保持与SGML的兼容性是有用的,并且他们通常倾向于使用可以检测XML中的错误而不是使XML易于创作的解析器。