XML中处理特殊字符 & < > ‘ ” 的方法

3次阅读

xml中必须转义的5个预定义字符是&amp;、、&quot;、’,分别用&amp;、<、>、&quot;、’表示;属性值中需按定界符匹配转义,文本内容中单双引号通常无需转义;推荐用CDATA处理大量特殊字符。

XML中处理特殊字符 & < > ‘ ” 的方法 ‘ &quot;>

在XML中,&amp;(单引号)、&quot;(双引号)属于预定义的特殊字符,直接写入文档会导致解析错误。必须使用对应的实体引用(entity reference)来安全表示。

必须转义的5个基础字符

XML规范只预定义了5个实体,其中与你提到相关的有:

  • &amp; → 写成 &amp;(注意:这里显示的是字面量,实际写入时是四个字符 &amp;)
  • <
  • >>
  • &quot;&quot;(用于属性值中包裹双引号内容,如 name=&amp;quot;He said &amp;quot;Hi&amp;quot;&amp;quot;
  • (用于属性值中包裹单引号内容,如 desc='It's OK'

单双引号的使用场景区别

XML元素内容里写单引号或双引号通常无需转义(例如:&amp;lt;msg&amp;gt;He said &amp;quot;Hello&amp;quot;&amp;lt;/msg&amp;gt; 是合法的),但一旦出现在属性值中,就必须按属性定界符匹配转义:

  • 用双引号包围属性值 → 属性内出现的 &quot; 必须写成 &quot;
  • 用单引号包围属性值 → 属性内出现的 必须写成
  • 不管哪种方式,&amp; 在属性值或文本内容中都必须统一写成 &amp;

推荐做法:优先用CDATA区段处理大段含特殊字符的内容

如果一段文本里大量混用 &amp;&quot;' 等,逐个转义易出错。此时可用 &lt;code&gt; 包裹整段内容:


里面所有字符都会被解析器原样保留,不作解析——但注意:CDATA内不能出现 ]]&gt; 字符序列。

编程中别手动拼接,用库函数自动转义

手写XML容易遗漏或错写实体(比如写成 这种非法形式)。实际开发中应交由XML生成库处理:

  • Java:用 TransformerDocumentBuilder 输出时自动转义
  • Python:用 xml.etree.ElementTreesubelement.text = &quot;A &amp; B&quot;,库会自动转为 A &amp; B
  • JavaScript(浏览器):用 DOMParser + XMLSerializer,或第三方库如 xmlbuilder2

基本上就这些。核心就一条:只要字符有歧义(尤其是 &amp;),就老实用标准实体;别图省事硬塞原始符号,解析器不会通融。

text=ZqhQzanResources