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