当前位置: 首页 > news >正文

XML(eXtensible Markup Language)

eXtensible Markup Language(可扩展标记语言)是一种用来存储和传输数据的文本格式。

具体定义

  • XML 可扩展标记语言,是用于标记电子文件使其具有结构性的标记语言,可以
    用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的
    源语言。
  • XML 文档结构包括 XML 声明、DTD 文档类型定义(可选)、文档元素。与
    HTML 不同,XML 不使用预定义标签,因此可以为标签指定描述数据的名称。
  • 在 Web 历史的早期,XML 作为一种数据传输格式非常流行(“AJAX”中的“X”
    即代表“XML”),但它的受欢迎程度现在已经下降,转而支持 JSON 格式。

XML vs HTML

特性XMLHTML
主要用途用于传输与存储数据用于显示数据
格式要求严格区分大小写不区分大小写
空格处理不会自动删除空格自动删除空格
标签定义标签可根据数据需求自定义扩展标签是预定义的

XML文档的构建模块

元素元素 (Element):

XML 文档的基本组成单位。一个元素由开始标签、结束标签及其内容组成。元素可以包含属性、文本、其他元素或这些的组合。元素的名称通常遵循大小写敏感的规则
示例:

<book>内容</book>

属性 (Attribute):

属性用于为元素提供额外的描述信息。属性总是包含在开始标签中,具有键值对的形式。
示例:

<book title="学习XML">内容</book>

在这个例子中,title 是 book 元素的属性,值为 “学习XML”。

实体 (Entity):

实体是一个特殊的标识符,用于表示在文档中反复使用的数据片段。它们通常用于替代某些字符(如 <、>)或存储外部文件。
预定义实体:

&lt;   <!-- 小于符号 < -->
&gt;   <!-- 大于符号 > -->
&amp;  <!-- 与符号 & -->

示例:

<book>
  <title>XML &amp; HTML</title>
  <description>这是一个包含特殊字符的文本,例如 &lt;&gt;</description>
</book>

在这个例子中,&amp; 表示 &,&lt; 表示 <,&gt; 表示 >。这些实体保证了 XML 文件在解析时不会产生冲突。
实体可以是字符实体(如上述示例)或外部实体(如外部文件引用)。

PCDATA(parsed chatacter data):

XML 解析器通常会解析 XML 文档中所有的文本。
当某个 XML 元素被解析时,其标签之间的文本也会被解析:

<message>This text is also parsed</message>

解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个实例中,其中的 元素包含着另外的两个元素(first 和 last):

<name><first>Bill</first><last>Gates</last></name>

而解析器会把它分解为像这样的子元素:

<name>
<first>Bill</first>
<last>Gates</last>
</name>

解析字符数据(PCDATA)是 XML 解析器解析的文本数据使用的一个术语。

CDATA(Character Data):

术语 CDATA 是不应该由 XML 解析器解析的文本数据。
像 “<” 和 “&” 字符在 XML 元素中都是非法的。

  • “<” 会产生错误,因为解析器会把该字符解释为新元素的开始。
  • “&” 会产生错误,因为解析器会把该字符解释为字符实体的开始。

某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分中的所有内容都会被解析器忽略。

CDATA 部分由 <![CDATA[ 开始,由 ]]> 结束:

<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>

在上面的实例中,解析器会忽略 CDATA 部分中的所有内容。
关于 CDATA 部分的注释:
CDATA 部分不能包含字符串 “]]>”。也不允许嵌套的 CDATA 部分。
标记 CDATA 部分结尾的 “]]>” 不能包含空格或换行。

XML特性

  • 所有 XML 元素都须有关闭标签
  • XML 标签对大小写敏感
  • XML 必须正确地嵌套
  • XML 文档必须有根元素
  • XML 的属性值需要加引号

XML实体

XML 实体是对数据的引用,根据实体种类的不同,XML 解析器将使用实体的替代文本或者外部文档的内容来替代实体引用。
XML 实体由三部分构成: 一个与字符 &, 一个实体名称, 以及一个分号 ;
XML 语言的规范中内置了各种实体。例如实体&lt;&gt;代表字符 < 和 >。这些是
用于表示 XML 标签的元字符,因此当它们出现在数据中时,通常必须使用它们的实体来表示。
实体类别:

  • 参数实体:用%声明,用%引用;在 DTD 中声明,在DTD中引用。
<!DOCTYPE book [
  %author;  <!-- 引用参数实体 -->
  <!ENTITY % author "John Doe">
]>
<book>
  <title>XML教程</title>
  <author>%author;</author>  <!-- 使用参数实体 -->
</book>
  • 其余实体:直接用实体名称声明,使用&引用;在 DTD 中声明,在 XML 中引用。
<!DOCTYPE book [
  <!ENTITY author "John Doe">
]>
<book>
  <title>XML教程</title>
  <author>&author;</author>  <!-- 使用一般实体 -->
</book>

文档类型(DTD)

文档类型定义(DTD,Document Type Definition)可定义合法的 XML文档构建模块,它使用一系列合法的元素来定义文档的结构(文档中使用的标签、属性及其组合方式)。

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用,也可以是两者的混合。

示例:

<?xml version="1.0"?>
<!DOCTYPE user [
  <!-- 定义根元素为 user -->
  <!ELEMENT user (username, password, userid, mail)> <!-- 定义 user 有四个子元素 -->
  <!ELEMENT username (#PCDATA)> <!-- 定义子元素类型为 #PCDATA -->
  <!ELEMENT password (#PCDATA)>
  <!ELEMENT userid (#PCDATA)>
  <!ELEMENT mail (#PCDATA)>
]>
<user>
  <username>pinginglab</username>
  <password>Pinker@123</password>
  <userid>1</userid>
  <mail>pinginglab@mail.com</mail>
</user>

DTD引用方式:

<!ELEMENT user (username, password, userid, mail)>
<!ELEMENT username (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ELEMENT userid (#PCDATA)>
<!ELEMENT mail (#PCDATA)>
#user.dtd文件
<?xml version="1.0"?>
<!DOCTYPE user SYSTEM "user.dtd">
<user>
  <username>xiaoming</username>
  <password>xiaoming@123</password>
  <userid>1</userid>
  <mail>xiaoming@mail.com</mail>
</user>

XML自定义实体

XML 允许在 DTD 中定义自定义实体。例如:

<!DOCTYPE foo [ <!ENTITY myentity "my entity value" > ]>

此定义意味着 XML 文档中对&myentity;实体引用的任何用法都将替换
为定义的值:“my entity value”。

XML外部实体

XML 外部实体是一种自定义实体,其定义位于声明它们的 DTD 之外。
外部实体的声明使用 SYSTEM 关键字,并且必须指定应从中加载实体值的URL。例如:

<!DOCTYPE foo [ <!ENTITY test SYSTEM "http://www.baidu.net" > ]>

URL 可以使用file://协议,因此可以从文件加载外部实体。例如:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE foo [ <!ENTITY hosts SYSTEM "file:///etc/hosts" > ]>
<abc>&hosts;</abc>

默认支持协议

libxml2PHPJava.NET
filefilehttphttp
httphttphttpshttps
ftpftpftpftp
phpfilefile
compress.zlibjar
compress.bzinetdoc
p2mailto
datagopher
glob
phar

相关文章:

  • 在Dify中实现联网检索功能(模拟DeepSeek)
  • 计算机组成原理第四——指令
  • 人工智能、机器学习、深度学习和大语言模型之间的关系
  • C语言基础要素:安装 Visual Studio 2022
  • 代码随想录day19
  • 透彻理解:方差、协方差、相关系数、协方差矩阵及其应用
  • springBoot统一响应1.0版本
  • DataWhale组队学习 wow-agent task4
  • 四、综合案例(Unity2D)
  • 浏览器下载vue.js.devtools,谷歌浏览器和edg浏览器
  • DeepSeek学习教程 从入门到精通pdf下载:快速上手 DeepSeek
  • Spring MVC配置文件
  • 【Linux】Linux线程互斥与同步(接口篇)
  • Spring 容器
  • 【三十四周】文献阅读:DeepPose: 通过深度神经网络实现人类姿态估计
  • 自学网络安全(黑客技术)2025年 —100天学习计划,网络安全零基础入门到精通教程建议收藏!
  • Python 函数(传递任意数量的实参)
  • AI智算-k8s+SGLang实战:DeepSeek-r1:671b满血版多机多卡私有化部署全攻略
  • Vue02
  • hot100_300. 最长递增子序列
  • 文庙印象:一周城市生活
  • 11-13世纪的地中海贸易
  • 山西国道塌方致55岁货车司机死亡,女儿:货车的车贷还要还
  • 南京84.57亿元成交8宗宅地:仅秦淮区一宗地块溢价成交
  • 马上评丨冒名顶替上中专,为何一瞒就是30多年?
  • 神舟二十号主要目的发布,在空间站驻留约6个月