我需要在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。
-
如果要处理字符数据而不是标记,则只有<和&被要求转义:
这些需要逃避:
" " ' ' < < > > & &