我需要在XML文档中转义哪些字符?

哪些字符必须在XML文档中转义,或者我可以在哪里find这样的列表?

如果你使用适当的class级或图书馆,他们会为你逃避。 许多XML问题是由string连接引起的。

XML转义字符

只有五个:

 " &quot; ' &apos; < &lt; > &gt; & &amp; 

转义字符取决于特殊字符的使用位置。

这些示例可以在W3C标记validation服务进行validation。

文本

安全的方法是逃避文本中的所有五个字符,然而,三个字符"'>不需要在文本中转义:

 <?xml version="1.0"?> <valid>"'></valid> 

属性

安全的方法是在属性中转义所有五个字符,然而, >字符不需要在属性中转义:

 <?xml version="1.0"?> <valid attribute=">"/> 

如果引号是"字符不需要在属性中转义"

 <?xml version="1.0"?> <valid attribute="'"/> 

同样,如果引号是"不需要在属性中转义'

 <?xml version="1.0"?> <valid attribute='"'/> 

注释

所有5个特殊字符不得在注释中转义:

 <?xml version="1.0"?> <valid> <!-- "'<>& --> </valid> 

CDATA

所有5个特殊字符不得在CDATA部分中转义:

 <?xml version="1.0"?> <valid> <![CDATA["'<>&]]> </valid> 

处理说明

XML处理指令中的所有5个特殊字符不得转义:

 <?xml version="1.0"?> <?process <"'&> ?> <valid/> 

XML与HTML

HTML有自己的一套转义代码 ,涵盖了更多的字符。

也许这将有助于:

XML和HTML字符实体引用列表

在SGML,HTML和XML文档中,称为字符数据和属性值的逻辑结构由字符序列组成,其中每个字符可以直接表示(表示自己),或者可以由称为字符引用的一系列字符表示,其中有两种types:数字字符引用和字符实体引用。 本文列出了在HTML和XML文档中有效的字符实体引用。

该文章列出了以下五个预定义的XML实体:

 quot " amp & apos ' lt < gt > 

根据万维网联盟(W3C)的规范, 在XML文档中有5个字符不得以文字forms出现 ,除非用作标记分隔符或注释,处理指令或CDATA部分。 在所有其他情况下,必须使用相应的实体或数字引用来replace这些字符,如下表所示:

原始字符 XML实体replace XML数字replace
< &lt; &#60;
> &gt; &#62;
&quot; &#34;
&&amp; &#38;
' ' &#39;

注意,上述实体也可以用于HTML,除了' ,这是用XHTML 1.0引入的,并没有在HTML 4中声明。为此,为了确保兼容性, XHTML规范build议使用&#39; 代替。

转义字符对于标签和属性是不同的。

对于标签:

  < &lt; > &gt; (only for compatibility, read below) & &amp; 

对于属性:

 " &quot; ' &apos; 

http://www.w3.org/TR/2008/REC-xml-20081126/#syntax

除非用作标记分隔符,注释,处理指令或CDATA部分,否则符号字符(&)和左尖括号(<)不得以文字forms出现。 如果在别处需要它们,则必须分别使用数字字符引用或string“&amp;”和“&lt;”来转义它们。 右括号(>)可以使用string“&gt;”来表示,为了兼容性,在出现在内容中的string“]]>”时,必须使用“&gt;”或字符引用来转义,当该string不标记CDATA节的结尾时。

为了允许属性值包含单引号和双引号,撇号或单引号字符(')可以表示为“'”,而双引号字符(“)as” ”。

除了通常已知的五个字符[<,>,&,“,'],我也会转义垂直制表符(0x0B)。它是有效的UTF-8,但不是有效的XML 1.0,甚至包括许多库libxml2)错过了它,并静静地输出无效的XML。

摘自: http : //en.wikipedia.org/wiki/XML#Escaping

有五个预定义的实体:

 &lt; represents "<" &gt; represents ">" &amp; represents "&" &apos; represents ' &quot; represents " 

“所有允许的Unicode字符都可以用数字字符引用来表示”。例如:

 &#20013; 

大多数控制字符和其他unicode范围被明确排除,这意味着(我认为)他们不能发生逃脱或直接:

http://en.wikipedia.org/wiki/Valid_characters_in_XML

这取决于上下文。 对于内容,它是<和&,和]]>(尽pipe是3而不是一个字符的string)。 对于属性值,它是<和&和“和”。对于CDATA,它是]]>。

新的,简单的回答一个老的,常见问题…

简化的XML转义

  1. 总是 (要记住90%重要)

    • 转义< as &lt; 除非<正在启动<tag/>
    • 逃离& as &amp; 除非&开始&entity;
  2. 属性值 (9%重要记住)

    • attr=" '单引号'在双引号内是可以的。 "
    • attr=' "双引号"在单引号内是可以的。 '
    • &quot;逃逸"'如同'一样。
  3. 评论 , CDATA和处理说明 (1%要记住)

    • <!--在评论 -->没有什么必须逃脱,但没有string是允许的。
    • <![CDATA[ CDATA ]]>不需要转义,但是不允许]]>string。
    • <?PITarget在PI中 ?>什么都不必转义,但不允许?>string。

如果要处理字符数据而不是标记,则只有<和&被要求转义:

http://www.w3.org/TR/xml11/#syntax

这些需要逃避:

 " &quot; ' &apos; < &lt; > &gt; & &amp;