我需要在XML文档中转义哪些字符?
哪些字符必须在XML文档中转义,或者我可以在哪里find这样的列表?
如果你使用适当的class级或图书馆,他们会为你逃避。 许多XML问题是由string连接引起的。
XML转义字符
只有五个:
 " " ' ' < < > > & & 
转义字符取决于特殊字符的使用位置。
这些示例可以在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; 代替。
转义字符对于标签和属性是不同的。
对于标签:
  < < > > (only for compatibility, read below) & & 
对于属性:
 " " ' ' 
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
有五个预定义的实体:
 < represents "<" > represents ">" & represents "&" ' represents ' " represents " 
“所有允许的Unicode字符都可以用数字字符引用来表示”。例如:
 中 
大多数控制字符和其他unicode范围被明确排除,这意味着(我认为)他们不能发生逃脱或直接:
这取决于上下文。 对于内容,它是<和&,和]]>(尽pipe是3而不是一个字符的string)。 对于属性值,它是<和&和“和”。对于CDATA,它是]]>。
新的,简单的回答一个老的,常见问题…
简化的XML转义
- 
总是 (要记住90%重要) -  转义<as<除非<正在启动<tag/>。
-  逃离&as&除非&开始&entity;。
 
-  转义
- 
属性值 (9%重要记住) -   attr="'单引号'在双引号内是可以的。"
-   attr='"双引号"在单引号内是可以的。'
-  如"逃逸"和'如同'一样。
 
-   
- 
评论 , CDATA和处理说明 (1%要记住) -   <!--在评论-->没有什么必须逃脱,但没有string是允许的。
-   <![CDATA[CDATA]]>不需要转义,但是不允许]]>string。
-   <?PITarget在PI中?>什么都不必转义,但不允许?>string。
 
-   
如果要处理字符数据而不是标记,则只有<和&被要求转义:
这些需要逃避:
 " " ' ' < < > > & &