XML中需用预定义实体(zuojiankuohaophpcn、youjiankuohaophpcn、&、"、')转义5个特殊字符,其余字符用数字引用,CDATA区可避免转义但不可嵌套。

XML中不能直接使用某些特殊字符,比如 、>、&、"、',否则会破坏文档结构或导致解析失败。必须用对应的XML实体引用(也叫字符引用)来代替。
必须转义的5个预定义实体
XML标准预先定义了5个实体,用于表示最常冲突的字符:
-
zuojiankuohaophpcn→ 表示(小于号) -
youjiankuohaophpcn→ 表示>(大于号) -
&→ 表示&(&符号本身) -
"→ 表示"(双引号,常用于属性值中) -
'→ 表示'(单引号,也用于属性值)
注意:' 在XML 1.0中是标准实体,但部分老解析器(如某些HTML解析器)可能不支持;若兼容性要求高,可用 '(十进制字符引用)替代。
其他字符用数字字符引用
除上述5个外,其余字符(如中文、版权符©、欧元€等)不能用命名实体表示,需用数字字符引用:
- 十进制格式:
中表示 Unicode 码位 U+4E2D(“中”字) - 十六进制格式:
©表示 ©(U+00A9)
只要确保文档声明了正确的编码(如 ),数字引用就能准确还原字符。
CDATA区:绕过转义的替代方案
当一段内容含大量特殊字符(如代码片段、HTML文本),逐个转义很繁琐。可改用 区块:
CDATA区内所有字符(包括 、&)都按原样处理,不会被解析为标记。但注意:CDATA不能嵌套,且不能包含字符串 ]]>(需拆分或转义)。
实际编写建议
多数现代编程语言的XML库(如Java的JAXB、Python的xml.etree.ElementTree、C#的XmlDocument)会自动转义输出内容,无需手动处理。但以下情况需特别留意:
- 手写XML文件时,务必对
&、、>做转义(属性值中还要处理引号) - 拼接字符串生成XML时,避免直接拼接用户输入——应调用库的转义方法(如 Python 的
xml.sax.saxutils.escape()) - 在XSLT或XPath中使用字符串常量时,引号需匹配:双引号属性内用
',单引号属性内用"










