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


当前回答

这取决于上下文。对于内容,它是<和&,和]]>(尽管是一个由三个字符组成的字符串而不是一个字符)。

对于属性值,它是<、&、"和'。

对于CDATA,为[]>。

其他回答

公认的答案不正确。最好是使用一个库来转义xml。

正如在另一个问题中提到的

基本上,控制字符和超出Unicode范围的字符是不允许的。这也意味着,例如,调用字符实体是禁止的。”

如果你只转义这五个字符。您可能会遇到这样的问题:发现了一个无效的XML字符(Unicode: 0xc)

根据万维网联盟(w3C)的规范,有5个字符不能以文字形式出现在XML文档中,除非用作标记分隔符或在注释、处理指令或CDATA部分中使用。在所有其他情况下,这些字符必须使用对应的实体或根据下表的数字引用替换:

Original CharacterXML entity replacementXML numeric replacement <                              &lt;                                    &#60;                                     >                              &gt;                                   &#62;                                     "                               &quot;                               &#34;                                     &                              &amp;                               &#38;                                     '                               &apos;                               &#39;                                    

注意,前面提到的实体也可以在HTML中使用,除了&apos;,它是在XHTML 1.0中引入的,在HTML 4中没有声明。因此,为了确保向后兼容性,XHTML规范建议使用&#39;代替。

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

2.4字符数据和标记

这取决于上下文。对于内容,它是<和&,和]]>(尽管是一个由三个字符组成的字符串而不是一个字符)。

对于属性值,它是<、&、"和'。

对于CDATA,为[]>。

如果您使用适当的类或库,它们将为您进行转义。许多XML问题都是由字符串连接引起的。

XML转义字符

只有五种:

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

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

这些示例可以在W3C标记验证服务(W3C Markup Validation Service)中验证。

Text

安全的方法是转义文本中的所有五个字符。但是,",'和>这三个字符在文本中不需要转义:

<?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 vs. HTML

HTML有自己的一组转义码,可以覆盖更多的字符。