XML中必须转义的字符只有5个:、&、"、',因它们具有语法含义,直接书写会破坏文档结构导致解析失败。

XML中必须转义的字符就5个:、>、&、"、'。它们分别对应 、>、&、"、'。直接写原字符会破坏结构,导致解析失败。
哪些字符必须转义
这五个字符在XML中有语法含义,不能当普通文本直写:
是标签起始符,必须写成-
>多数情况下可不转义(除非紧跟出现在]]>或类似上下文),但为统一建议转成> -
&表示实体开始,必须写成&,否则像©会被误解析 -
"在双引号包围的属性值里要转义为",否则提前闭合 -
'在单引号包围的属性值里要转义为'
用CDATA段绕过转义
当一段内容里全是代码、HTML、SQL或大量符号时,手动逐个转义既麻烦又易错。用 最省心:
- CDATA区内的所有字符原样保留,解析器完全不处理
- 适合包裹 JavaScript、SQL 查询、配置片段等
- 注意:不能嵌套,也不能出现连续字符串
]]>,否则会意外截断 - 示例:
属性值里巧用引号切换
属性本身支持单引号或双引号,灵活换用能少写很多转义:
- 用双引号包属性,里面单引号不用转:
- 用单引号包属性,里面双引号不用转:
- 避免混用,比如
type="He said "Hi""会报错
编程时交给标准库自动处理
手写替换容易漏或错,推荐调用成熟工具:
- Java:用
StringEscapeUtils.escapeXml11()(Apache Commons Text)或XmlWriter输出时自动转义 - Python:用
xml.sax.saxutils.escape() - .NET:用
SecurityElement.Escape()或XmlWriter的 WriteElementString - DOM操作中,用
element.setTextContent()而非element.appendChild(textNode),前者会自动转义
基本上就这些。核心是:该转的5个字符别硬扛,该用CDATA的别死磕,该交程序的别手写。保持一致、依赖标准库,问题就很少反弹。










