XML中处理特殊字符 & < > ' " 的方法

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

\' \">

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

必须转义的5个基础字符

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

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

单双引号的使用场景区别

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

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

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

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


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

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

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

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

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