XML文件中的特殊字符怎么转义 XML实体引用详解

12次阅读

xml中必须转义的5个基础字符是

XML文件中的特殊字符怎么转义 XML实体引用详解

XML文件中,小于号()、与符号(&)、双引号(”)和单引号(’)这5个字符有特殊含义,直接写入会导致解析失败。必须用对应的XML实体引用替换,否则文档会报错或被截断。

必须转义的5个基础字符

XML规范强制要求以下字符在文本内容和属性值中必须转义,否则解析器无法正确识别标签结构:

  • 替代 (避免被误认为标签开始)
  • > 替代 >(虽多数解析器允许不转义,但为兼容性建议统一处理)
  • & 替代 &(防止被当作实体引用起始符)
  • 替代 "(仅在属性值使用双引号定界时必需)
  • 替代 '(仅在属性值使用单引号定界时必需)

属性值中的引号处理规则

属性值必须用引号包裹,且引号类型决定需转义的字符:

  • 若用双引号包围属性值(name="John & Jane"),则内部的 " 必须写成 "& 必须写成 &
  • 若用单引号包围(name='John & Jane'),则内部的 ' 必须写成 '& 同样要写成 &
  • 不推荐混用或省略引号——XML不允许无引号的属性值

常见误区与安全提醒

很多开发者误以为只有 & 需转义,其实只要出现在文本或属性中,上述5个字符都应按规则处理:

  • 中文标点如《》、&、”、’ 不是XML特殊字符,无需转义(它们属于普通Unicode字符)
  • 不要用html实体如  © —— XML默认只认识5个预定义实体,其他需自行声明DTD或使用数值字符引用(如 ©
  • 程序生成XML时,务必对用户输入做转义(例如javaStringEscapeUtils.escapeXml11()pythonxml.sax.saxutils.escape()

数值字符引用:补充方案

当需要表达任意Unicode字符(包括未定义命名实体的字符),可用数值引用:

  • 十进制:A 表示字母 A
  • 十六进制: 表示 ☺ 符号
  • 注意:数值引用也需遵循上下文规则,比如 可替代 ,但不能简化书写逻辑
text=ZqhQzanResources