XML中<和>需用转义,&需用&;大段含标签内容用CDATA;程序生成应使用XML库自动处理;浏览器显示XML需防二次解析。

XML里<和>直接写会报错
XML解析器把<当成标签起始,>当成结束,哪怕你只是想显示“3 < 5”这种普通文本,也会被当成语法错误。常见报错是XMLParseError: expected '>'或Invalid character in content。
解决办法不是删掉符号,而是用预定义实体代替:
-
<→ -
>→> -
&→&(注意:连这个也要转义,否则会被二次解析成<code><)
CDATA块适合大段含</>的原始内容
如果要嵌入HTML、SQL、代码片段这类本身就大量含<和>的内容,逐个转义太麻烦,也容易漏。这时用<![CDATA[...]]>最稳妥。
注意三点:
- CDATA内**所有字符原样保留**,不解析实体、不识别标签,连
都会当普通文本显示 - CDATA不能嵌套,且内容里不能出现
]]>字符串(否则会被提前截断),遇到就得拆开写成]]><![CDATA[ - 某些老系统(如部分Java SAX解析器)对CDATA支持不稳定,生产环境建议先测
<description><![CDATA[<p>当 x < 10 时执行</p><script>alert('a > b');</script>]]></description>
程序生成XML时别手写拼接,用库自动转义
手动拼字符串+replace(<, )看着简单,但极易出错:漏转<code>&、重复转义、混淆上下文(比如属性值里和文本节点里的处理逻辑不同)。
正确做法是交给语言内置或成熟库处理:
- Python用
xml.etree.ElementTree:设text属性时自动转义,不用管 - Java用
javax.xml.transform.Transformer或org.dom4j:调用setText()而非直接拼字符串 - Node.js用
xmlbuilder2:传入对象自动生成合法XML,<自动变
自己写正则替换<?别试。XML结构嵌套深了,正则根本不可靠。
浏览器里innerHTML显示XML内容会二次解析
如果你把一段含的XML字符串赋给<code>innerHTML,浏览器会把它当HTML解析——<div>真可能被渲染成一个<code><div>元素,而不是显示文字。
要纯文本展示XML,必须:
- 用
textContent或innerText(安全,但无格式) - 或先用
document.createTextNode()包裹再插入 - 或把
&、<、>再转一次HTML实体:才能在<code>innerHTML里显示为
这个环节最容易被忽略:XML内容本身合法,但展示层又搞乱了。









