XML实体是文本占位符,类似常量或变量,用于避免重复、提升可维护性及安全转义;预定义实体含5个,如
XML中的实体(Entity)本质上是一种“文本占位符”,作用类似编程语言里的常量或变量,用来代表一段固定内容,避免重复书写、提升可维护性,也用于安全转义特殊字符。
实体的常见类型和用途
XML中主要有三类实体:
- 预定义实体:XML标准内置的5个,专用于表示无法直接写入文档的字符,如 zuojiankuohaophpcn();这些不用声明就能直接用。
- 通用实体(General Entity):最常用的一类自定义实体,供XML文档内容中引用,以 &名称; 形式使用,比如 &bj; 表示“北京大学出版社”。
-
参数实体(Parameter Entity):只在DTD内部使用,以 %名称; 形式出
现,用于复用DTD片段(如元素定义、属性列表),不能在XML正文里引用。
如何在XML中自定义通用实体
自定义通用实体必须在DTD中声明,可以是内部DTD(写在XML文件内)或外部DTD(单独的.dtd文件)。关键步骤如下:
- 在DOCTYPE声明中嵌入内部DTD,或通过 SYSTEM/Public 引用外部DTD;
- 在DTD中用 定义实体,例如 ;
- 在XML正文里用 &名称; 引用,如 &bj;,解析时会被自动替换成“北京大学出版社”;
- 注意:实体值中不能包含未转义的 、& 字符,若需保留,应使用CDATA段或预定义实体替代。
一个完整可用的内部DTD示例
以下代码可在任意支持DTD验证的XML解析器中运行:
]>XML 李白&bj; 22.5
这里 &bj; 在解析时被替换为“北京大学出版社”,一处修改,全文生效。
使用时要注意的细节
- 实体名只能含字母、数字、连字符、下划线和点,不能以数字开头;
- 实体不能递归引用自身(包括间接循环),否则解析会失败;
- 如果实体值含双引号,建议用单引号包裹声明,反之亦然;也可用 " 转义;
- 外部实体(如 )涉及文件读取,存在XXE风险,生产环境务必禁用或严格校验。

现,用于复用DTD片段(如元素定义、属性列表),不能在XML正文里引用。






