XML实体引用是什么 XML中预定义实体的使用

2次阅读

XML 实体引用是用于转义特殊字符的语法机制,区别在于它告诉解析器“这是字面字符而非语法标记”;XML 仅预定义 5 个实体(&、<、>、”、’),未声明的自定义实体会导致解析错误。

XML 实体引用是什么 XML 中预定义实体的使用

XML 实体引用是啥,跟普通字符有啥区别

XML 里不能随便写 &、<code>> 这些符号,因为它们有语法含义。实体引用就是一种“转义写法”,让解析器知道:“这不是语法标记,就是字面意思的字符”。比如 < 表示小于号本身,不是标签开始。

它不是编码(比如 UTF-8),也不是 HTML 里的   那种可选美化手段——在 XML 里,该用实体的地方不用,文档直接算格式错误,解析器会报错停住。

XML 预定义实体只有 5 个,别瞎造

XML 标准只承认这 5 个内置实体:&<>"'。没有 ©,没有  ,也没有 ©(数值字符引用另说,但那是另一套机制)。自己加一个 &foo;,又没在 DTD 或 schema 里声明,解析器不认识,直接报 Entity'foo' not defined

常见错误现象:

  • 把 HTML 习惯带进 XML:在 XML 文件里写  ,结果解析失败
  • 用编辑器自动替换把 & 换成 &,但漏了其他符号,导致 还在裸奔
  • 以为 ' 在所有环境都安全——其实老版本 IE 的 XML 解析器不支持它

什么时候必须用,什么时候可以不用

核心判断依据是:这个字符是否出现在 XML 的结构位置上。比如在元素内容里写 price < 100,这里的 < 是数据本意,必须转义;但如果它在属性值外、且不在标签边界上(比如注释里),其实也可以不转——但不推荐,容易误判。

更稳妥的做法:

  • 所有出现在元素文本内容或属性值中的 &、<code>>,一律转义
  • "' 只在对应属性定界符内需要转义(比如 name="O'Reilly"
  • 如果内容来自用户输入或外部系统,别手动拼接,用库生成(如 Python 的 xml.etree.ElementTree 自动处理)

数值字符引用和实体引用混用要注意什么

XML 允许用 (十进制)或 <code>(十六进制)表示字符,这叫数值字符引用,它不依赖 DTD 声明,比自定义实体可靠得多。但注意:<code> 是非法的(空字符),多数解析器会拒掉整个文档; (回车)和 (换行)虽然合法,但在某些解析场景下会被规范化成统一换行符,影响原始格式。

容易被忽略的一点:UTF-8 编码的 XML 文件里,只要声明了 <?xml version="1.0" encoding="UTF-8"?>,大部分常用字符(比如中文、emoji)完全可以原样写,不用实体也不用数值引用——实体不是万能解药,只是结构冲突时的必要妥协。

星耀云
版权声明:本站原创文章,由 星耀云 2026-03-20发表,共计1037字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources