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


当前回答

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

2.4字符数据和标记

其他回答

根据万维网联盟(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字符数据和标记

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

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

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

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

也许这将有所帮助:

XML和HTML字符实体引用列表:

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

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

quot  "
amp   &
apos  '
lt    <
gt    >

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

标签:

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

属性:

" &quot;
' &apos;

从字符数据和标记:

The ampersand character (&) and the left angle bracket (<) must not appear in their literal form, except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section. If they are needed elsewhere, they must be escaped using either numeric character references or the strings " &amp; " and " &lt; " respectively. The right angle bracket (>) may be represented using the string " &gt; ", and must, for compatibility, be escaped using either " &gt; " or a character reference when it appears in the string " ]]> " in content, when that string is not marking the end of a CDATA section. To allow attribute values to contain both single and double quotes, the apostrophe or single-quote character (') may be represented as " &apos; ", and the double-quote character (") as " &quot; ".