XML中必须转义的5个预定义字符是&、、"、',分别用&、zuojiankuohaophpcn、youjiankuohaophpcn、"、'表示;属性值中需按定界符匹配转义,文本内容中单双引号通常无需转义;推荐用CDATA处理大量特殊字符。
\' \">
在XML中,&、'(单引号)、"(双引号)属于预定义的特殊字符,直接写入文档会导致解析错误。必须使用对应的实体引用(entity reference)来安全表示。
XML规范只预定义了5个实体,其中与你提到相关的有:
name="He said "Hi"")desc='It's OK')XML元素内容里写单引号或双引号通常无需转义(例如: 是合法的),但一旦出现在属性值中,就必须按属性定界符匹配转义:
如果一段文本里大量混用 &、"、'、 等,逐个转义易出错。此时可用 包裹整段内容:
里面所有字符都会被解析器原样保留,不作解析——但注意:CDATA内不能出现 ]]> 字符序列。
手写XML容易遗漏
或错写实体(比如写成 ∧ 这种非法形式)。实际开发中应交由XML生成库处理:
Transformer 或 DocumentBuilder 输出时自动转义xml.etree.ElementTree 的 subelement.text = "A & B",库会自动转为 A & B
DOMParser + XMLSerializer,或第三方库如 xmlbuilder2
基本上就这些。核心就一条:只要字符有歧义(尤其是 &),就老实用标准实体;别图省事硬塞原始符号,解析器不会通融。