xml中特殊字符必须转义:①5个内置实体(<、>、&、"、');②数字引用(€或€);③自定义实体需dtd声明;④易错字符用数字引用;⑤cdata节可包裹大段未转义文本。

XML文档中使用特殊字符时,必须通过预定义的实体引用进行转义,否则会导致解析失败或数据异常。以下是XML标准支持的五种内置字符实体及其对应关系,以及常见扩展实体的规范表示方式:
一、XML标准内置实体
XML规范强制要求处理器识别且仅识别五个预定义实体,用于替代在XML语法中具有特殊含义的字符。这些实体不依赖于外部DTD声明,所有XML解析器均原生支持。
1、< 表示小于号,用于避免与标签起始符号 < 混淆。
2、> 表示大于号,用于避免与标签结束符号 > 混淆。
3、& 表示和号(&),用于避免被误认为实体引用的起始符 &。
4、" 表示双引号,用于属性值中嵌入双引号时保持结构合法,如 title="He said "Hello""。
5、' 表示单引号,用于属性值中嵌入单引号时保持结构合法,如 name='O'Reilly'。
二、数字字符引用方式
当需要表示非标准实体所涵盖的任意Unicode字符时,可采用十进制或十六进制数字字符引用。该方式不依赖实体声明,直接由解析器按Unicode码点解析。
1、十进制格式为 €,例如欧元符号 € 对应 €。
2、十六进制格式为 €,同一欧元符号也可写作 €。
3、数字引用必须以分号 ; 结尾,缺失分号将导致解析错误。
三、自定义实体声明方法
若需在文档中重复使用特定字符序列(如版权符号 © 或商标符号 ™),可通过内部DTD声明自定义实体。该声明必须位于根元素之前,且仅对当前文档有效。
1、在文档开头的 XML 声明之后、根元素之前插入 DOCTYPE 声明,格式为 <!DOCTYPE root-element [ <!ENTITY copy "©" > ]>。
2、在文档内容中使用 © 即可展开为 © 符号。
3、实体名称只能包含字母、数字、连字符、下划线和句点,且不能以数字开头。
四、常见易错字符处理
某些字符虽无内置实体,但在实际应用中高频出现且易引发解析问题,需严格采用数字引用或CDATA节包裹。
1、不间断空格(U+00A0)必须写作 或 ,不可直接输入空格。
2、软连字符(U+00AD)必须写作 ,直接输入可能被忽略或导致截断异常。
3、零宽空格(U+200B)必须写作 ,否则在文本流中不可见且无法被正确索引。
五、CDATA节替代方案
当大段文本含多个需转义字符(如JavaScript代码或HTML片段),使用CDATA节可免除逐个转义,其内容被解析器视为纯字符数据而非标记。
1、CDATA节以 <![CDATA[ 开始,以 ]]> 结束,中间所有字符均不作解析。
2、CDATA节内不可出现字符串 "]]>",否则会提前终止节区,导致后续内容解析错误。
3、CDATA节不能嵌套,且仅适用于元素内容,不可用于属性值中。










