XML中的实体(Entity)是什么 如何自定义实体

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风险,生产环境务必禁用或严格校验。