XML内部实体和外部实体

JSON 2024-04-17 18:52:15 217

今天sojson给大家介绍一下XML内部实体和外部实体,会给大家带来示例和注意事项。希望此篇文章能给你带来帮助。

XML内部实体

内部实体是在 DTD 中本地定义的实体。内部实体的基本目的是避免一次又一次地输入相同的内容(例如组织的名称)。相反,我们可以定义一个内部实体来包含文本,然后您只需在要插入文本的位置使用该实体即可。由于实体是由解析器扩展的,因此您可以放心,您将在每个位置获得相同的文本。如果您拼错实体名称,解析器也会捕获。

要使用实体,请在文档中插入“实体引用”。您可能已经熟悉一些实体引用,因为您需要将它们用于无法直接在 XML 文档中键入的特殊字符,例如“<”和“&”。实体引用是一个与号 (&),后跟实体名称,然后是分号 (;)。

如果您已定义实体“compname”来包含您公司的名称,则可以将其与以下实体引用“&compname;”一起使用。

由实体引用插入的文本称为“替换文本”。内部实体的替换文本可以包含标记(元素、属性、处理指令、其他实体引用等),但内容必须平衡(在实体中开始的任何元素必须在同一实体中结束)和循环不允许实体引用。

实体声明

实体在使用之前必须先声明。它们可以在 DTD 中声明(如果您的 XML 解析器处理 DTD(也称为外部子集)或内部子集)。注意:如果同一实体声明多次,则仅适用第一个声明,而内部子集是在外部子集之前处理。

所有实体均使用“ENTITY”声明进行声明。声明的确切格式区分内部实体、外部实体和参数实体。

声明内部实体

内部实体声明具有以下形式:

<!ENTITY实体名称“替换文本”>

您可以使用双引号或单引号来分隔替换文本。前面提到的 yoyo 的声明是:

<!ENTITY compname 'w3resource.com.'>

预定义的内部实体

内部实体中预定义了五个内部实体。所有 xml 处理器都需要支持对这些实体的引用,即使它们没有声明。

这是一个包含预定义实体及其替换文本的表

实体名称替换文本
ltThe less than sign (<)
gtThe greater than sign (>)
>ampThe ampersand (&)
aposThe single quote or apostrophe (')
quotThe double quote (")

外部实体

外部实体提供了一种将文档划分为逻辑块的机制。例如,您可以将每个章节存储在单独的文件中,并使用外部实体“获取”这 10 章,而不是编写一个整体文档(例如一本包含 10 章的书)。

由于不同文档中的外部实体可以引用文件系统上的相同文件,因此外部实体提供了实现重用的机会。小型分立组件(图形、合法样板、警告消息)的重用相当容易管理。大规模地实现重用需要一个实体管理系统,而 XML 本身并不提供这种系统。

关于外部实体的一些注意事项

外部实体不必由单个元素组成;您可以将三个段落组成的序列甚至一堆带有嵌入内联标记的字符数据放入外部实体中。但外部实体中的标签必须保持良好平衡(您不能在实体中开始标签并在文档或另一个实体中结束标签)。

外部实体可以引用内部或其他外部实体,但不能有循环引用。

您可以在单个文档中多次引用同一外部实体。但请注意,如果您这样做,并且担心有效性,则必须避免在外部实体中使用 ID 属性。使用在文档中多个位置包含 ID 的外部实体将生成具有多个重复 ID 的文档,这是一种有效性错误。

拥有多个引用同一外部文件的外部实体是合法的。

对外部实体使用的字符编码没有附加限制。特别是,可以在同一文档中使用具有不同编码的外部实体。

声明外部实体

外部实体声明有两种形式。如果外部实体包含 XML 文本,则声明具有以下形式:

<!ENTITY <i>entityname</i>
[PUBLIC "<i>public-identifier</i>"]
SYSTEM "<i>system-identifier</i>">

系统标识符必须通过URI(最常见的是简单的文件名)指向资源的实例。公共标识符(如果提供)可以由 XML 系统用来生成备用 URI(这在支持公共标识符的系统上提供了方便的间接级别)。

将 chap1.xml 合并到文档中的外部实体可以这样声明:

<!ENTITY chap1 SYSTEM "chap1.xml">

尽管以 XML 存储所有内容的趋势不断增长,但仍有一些遗留系统仍然以非 XML 格式存储数据。图形有时以奇怪的格式存储,例如 PNG 和 GIF;-)。

引用这些文件的外部实体必须声明它们包含的数据不是 XML。他们通过用符号指示外部实体的格式来实现这一点:

<!ENTITY <i>entityname</i>[<span class="OPTIONAL">PUBLIC "<i>public-identifier</i>"</span>]
SYSTEM "<i>system-identifier</i>"<i>notation</i>>

版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/523.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:
XML

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
简述md5算法的具过程
自媒时代的贤内助——AI 视频云
关于一位“caoz的梦呓”的大佬在微信公众号喷我的整回复
SOJSON 使用又拍云 CDN 整架构,解决百度 SEO 方案
Shiro教程(六)Shiro整的配置文件
JSON是什么?它能带来什么?它XML比较?
如何处理大积 XLSX/CSV/TXT 文件?
for循环的 i++ ++i 的区别
HTMLJSON如何互转
Maven的MirrorRepository 的详细讲解
最新文章
JavaScript对象详细剖析 2
Python print() 函数 88
PHP if/else/elseif 语句 114
HTML5 Canvas弧线教程 103
Java赋值运算符 118
XML内部实体和外部实体 217
Java面向对象编程概念 177
PHP回显语句 130
Linux—文件树 161
C语言while循环和do while循环 155
最热文章
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 683059
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 674756
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 603392
免费天气API,天气JSON API,不限次数获取十五天的天气预报 582860
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 553207
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 509506
Elasticsearch教程(四) elasticsearch head 插件安装和使用 480131
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 265295
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 244343
Elasticsearch教程(一),全程直播(小白级别) 225702
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...