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

XML里和<code>>直接写会报错
XML解析器把当成标签起始,<code>>当成结束,哪怕你只是想显示“3 XMLParseError: expected '>'或Invalid character in content。
解决办法不是删掉符号,而是用预定义实体代替:
→ <code><-
>→> -
&→&(注意:连这个也要转义,否则<会被二次解析成)
CDATA块适合大段含/<code>>的原始内容
如果要嵌入HTML、SQL、代码片段这类本身就大量含和<code>>的内容,逐个转义太麻烦,也容易漏。这时用最稳妥。
注意三点:
- 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,自动变<code><
自己写正则替换?别试。XML结构嵌套深了,正则根本不可靠。
浏览器里innerHTML显示XML内容会二次解析
如果你把一段含<的XML字符串赋给innerHTML,浏览器会把它当HTML解析——<div>真可能被渲染成一个<div>元素,而不是显示文字。
<p>要纯文本展示XML,必须:</p>
<ul>
<li>用<code>textContent或innerText(安全,但无格式)
document.createTextNode()包裹再插入&、、<code>>再转一次HTML实体:才能在<code>innerHTML里显示为<
这个环节最容易被忽略:XML内容本身合法,但展示层又搞乱了。

















