XML 初学者教程
什么是 XML?
XML 代表 eX可拉伸的 MArkupe L语言。它是一种使用标记并可以扩展的语言(不是编程语言)。它源自 STANDARD G概括 MArkupe L语言(SGML)。 XML 还使用 DTD(D占用 TYPE DXML 定义(英语:definitions)来定义 XML 文档结构。
XML 不用于处理计算操作和算法。因此,XML 不是编程语言。其主要目标是传输数据,而不是显示信息。XML 弥合了人类可读性和机器可读性之间的差距。与 HTML 标签不同,XML 标签是自描述的。
XML 是一种开放格式。XML 的文件扩展名为 .xml
XML 的历史
XML 始于 1996 年,并于 1998 年首次发布。 W联合国 WIDE Web Consortium(W3C)是 XML,它变成了 W3C 推荐 。
XML 有两个版本。
- XML 1.0
- XML 1.1
XML 1.1 是最新版本。然而, XML 1.0 是最常用的版本。
XML 的编辑器包括:
- 蒂姆·布雷,
- 让·保利,
- CM Sperberg,
- 伊芙·马勒
- 弗朗索瓦·耶尔热(François Yergeau)。
XML 功能
以下是 XML 的一些重要特性:
- 它是可扩展的并且易于人类阅读。
- 它独立于平台和语言。
- 它保留了空白。
- 整体来说比较简单。
- 自我描述的性质。
- 它将数据与 HTML 分离。
- XML 标记不是预定义的。 您需要定义自定义标签。
- XML 旨在承载数据,而不是显示该数据。
- XML 的标记代码很容易为人类所理解。
- 结构良好的格式易于从程序中读取和写入。
- XML 是一种像 HTML 一样的可扩展标记语言。
XML 编码
编码是将 Unicode 字符转换为其二进制表示形式。 UTF 用于 XML 编码。 联合会 代表 UCS (UCS 代表 Universal C破坏者 S等) T转型 F格式。
UTF编码主要有两种类型。
- UTF-8:UTF-8 使用 8 位来表示字符。
- UTF-16
示例:
<?xml version="1.0" encoding="UTF-8"?>
它使用 16 位来表示字符。
示例:
<?xml version="1.0" encoding="UTF-16"?>
您可以在 XML 声明中使用编码。UTF-8 是 XML 中的默认编码。
XML 语法
下面的代码段显示了基本的 XML 语法。
<?xml version = "1.0" encoding = "UTF-8" ?> <root> <child> <subchild>.....</subchild> </child> </root>
XML 声明
XML 声明由 XML 版本、字符编码或/和独立状态组成。声明是可选的。
XML 声明的语法
下面的代码段显示了 XML 声明的语法。
<?xml version="version_number," encoding="character_encoding" standalone="yes_or_no" ?>
XML 声明规则
以下是 XML 声明规则。
- 如果存在 XML 声明,它必须是第一个出现的内容。
- XML 声明区分大小写,必须以小写字母开头 <?xml.
- 它没有结束标签。
XML 声明示例
下面的代码段显示了 XML 声明的示例。
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
XML 注释
评论是可选的。添加评论有助于理解文档内容。
XML 注释的语法
评论开头为 并以...结束 –>.
下面的代码段显示了 XML 注释的语法。
<!-- Add your comment here -->
XML 标签和元素
标签除了声明外都是成对出现的。每个标签对都由一个 开始标签 (也称为 开始标签)和一个 结束标签 (也称为 结束标签).
标签名称包含在 <>。对于特定的标签对,开始和结束标签必须相同,但结束标签除外 / 后 <.
<name>...</name>
开始和结束标签之间的任何内容都称为 内容.
开始标签、内容和结束标签合称为 element.
Opening tag + content + closing tag = an element
请注意: 元素也可能包含属性。你很快就会学到属性。
让我们考虑下面的因素。
<age>20</age>
在上面的元素中,
- 年龄 是 元素的名称。
备注:标签名称 也称为 element or 元素名称.
- – 开始标签
- 25 –内容
- – 结束标签。
如果标签之间没有内容,如下所示,则称为 空标签.
<result></result>
XML 标签和元素规则
以下列表显示了 XML 标签和元素规则。
- 标签区分大小写。
示例:
正确的:
<age>20</age>
错误:
<age>20</Age>
注意:年龄, 年龄, 和 年龄 在 XML 中有三种不同的名称。
- 所有 XML 文档都必须包含单个根元素。
- 所有元素都必须有一个结束标签(声明除外)。
- 标签名称必须以字母或下划线开头,不能以 XML。
- 标签名称可以包含字母、数字、连字符、下划线和句点。连字符、下划线和句点是唯一允许使用的标点符号。
- 标签名称不能包含空格。
- 所有元素必须正确嵌套。
示例:
正确的:
<b><u>This text is bold and italic</u></b>
错误:
<b><u>This text is bold and italic.</b></u>
XML 属性
元素的属性位于开始标记中的标记名称之后。您可以为单个元素添加具有不同属性名称的多个属性。
让我们考虑下面的 XML 文档。
<company name="ABC Holdings" location="London"> <chairman>Mr. John</chairman> <gm>Mr. Wood</gm> </company>
有两个属性 公司 元素,即 姓名 和 地址.
让我们研究一下 姓名 属性,
- 名称=”ABC控股” – 属性
- 姓名 – 属性名称
- 农行控股 – 属性值
备注:安 属性名称 也被称为 属性.
另请注意,在上面的例子中, 公司 是 根 元件。
XML 属性规则
以下列表显示了 XML 属性规则。
- 属性值必须在引号内。
- 一个元素不能包含多个同名的属性。
属性与元素
你还搞不清楚属性和元素的区别吗?下面是另一个例子。
让我们考虑下面给出的文件 A 和 B。
文件 A:
<teacher subject="English"> <name>Mr. John</name>. <qualification>Graduate</qualification> </teacher>
文件 B:
<teacher> <subject>English</subject> <name>Mr. John</name> <qualification>Graduate</qualification> </teacher>
在文档 A 中, 主题 是一个 属性。
在文档 B 中, 主题 是一个 element.
XML 实体
什么是 XML 实体?
简单来说,实体是一种表示特殊字符的方式。实体也称为 实体 引用.
为什么需要 XML 实体?
一些字符(例如 “, & <等)在 XML 中是保留的。它们被称为 特殊的角色 不能直接用于其他用途。
例如 < 和 > 用于的符号 标签. 您无法直接从键盘输入 少于 和 比...更棒 符号。相反,您需要使用实体。
下表显示了一些流行的 XML 实体。
字符 | 描述 | 实体名称 | 用法 |
---|---|---|---|
“ | 引号(双引号) | QUOT | “ |
& | 与号 | amp | 和 |
“ | 撇号(单引号) | 者 | “ |
< | Less 比标志 | lt | < |
> | 大于号 | gt | > |
示例:
<friend> <name>My friends are Alice & Jane.</name> </friend>
HTML 与 XML
HTML 和 XML 之间的相似之处
以下列表显示了 HTML 和 XML 之间的相似之处。
- 两者都是开放格式。
- 两者都是标记语言。
- 两者都使用标签和属性来描述内容。
HTML 和 XML 之间的差异
尽管 XML 与 HTML 类似,但 XML 并不能替代 HTML。HTML 和 XML 之间也存在一些显著差异。
下表显示了 HTML 和 XML 之间的比较。
HTML | XML | |
---|---|---|
代表 | 超文本标记语言 | 可扩展标记语言 |
语言类型 | 预定义的标记语言。 | 指定标记语言的框架。 |
结构细节 | 不提供。 | 提供。 |
目的 | 用于显示数据。 | 用于传输数据 |
通过驱动 | 格式驱动。 | 内容驱动。 |
自然 | 具有静态性质。 | 具有动态性质。 |
标签类型 | 预定义标签。 | 用户定义的标签。 |
标签限制 | 可用的标签数量有限。 | 标签是可扩展的。 |
结束标签 | 没有必要使用结束标签(但建议使用结束标签)。 | 结束标签是强制性的。 |
命名空间支持 | 不支持。 | 支持的。 |
区分大小写 | 标签不区分大小写。 | 标签区分大小写。 |
空格 | 空白不能保留(可以忽略空白)。 | 保留空白(不能忽略空白)。 |
解析 Java脚本 | 不需要任何额外的应用程序。 | 需要 DOM 实现。 |
代码嵌套 | 不一定需要。 | 需要。 |
故障 | 可以忽略小错误。 | 不允许出现错误。 |
文件扩展名 | 的.html or 。HTM | 。XML |
尺码 | 较大。 | 比较小。 |
行情 | 属性值不需要加引号。 | XML 属性值必需。 |
对象支持 | 提供本机对象支持。 | 对象必须通过惯例来表达。 |
空支持 | 本机识别空值。 | 需要在元素上使用 xsi:nil。 |
格式决定 | 为应用程序数据提供直接映射。 | 需要付出更大的努力。 |
学习曲线 | Less 与 XML 相比,学习曲线陡峭。 | 陡峭的学习曲线。 |
网站 | https://html.spec.whatwg.org/ | https://www.w3.org/TR/xml11/ |
基本 HTML 语法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body> </html>
基本 XML 语法
<?xml version = "1.0" encoding = "UTF-8" ?> <root> <child> <subchild>.....</subchild> </child> </root>
具有 HTML 和 XML 的相同示例
使用 HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <p>Book</p> <p>Name: Anna Karenina</p> <p>Author: Leo Tolstoy</p> <p>Publisher: The Russian Messenger</p> </body> </html>
使用 XML
<?xml version = "1.0" encoding = "UTF-8" ?> <book> <name>Anna Karenina</name> <author>Leo Tolstoy</author> <publisher>The Russian Messenger</publisher> </book>
JSON 与 XML
JSON 和 XML 之间的相似之处
以下列表显示了 JSON 和 XML 之间的相似之处。
- 两者都是开放格式。
- 两者都是自我描述的。
- 两者都有层次结构。
- 两者都可以被多种编程语言解析和使用。
JSON 和 XML 之间的差异
XML 和 JSON 之间也存在一些差异。
下表显示了 JSON 和 XML 之间的比较。
JSON | XML | |
---|---|---|
代表 | Java脚本对象符号 | 可扩展标记语言 |
延伸自 | JavaScript | SGML |
数据存储 | 以键值对形式存储的数据。 | 数据以树状结构存储。 |
命名空间 | 不支持命名空间。 | 支持命名空间。 |
评论 | 不支持添加评论。 | 可以添加评论。 |
数据可访问性 | 可作为 JSON 对象轻松访问。 | 需要解析数据。 |
元数据 | 不支持添加元数据。 | 可以写入元数据。 |
类型 | JSON 类型:字符串、数字、数组、布尔值。 | 所有 XML 数据都应该 字符串. |
支持的数据类型 | 支持 文本 和 数 仅限数据类型。 | 支持多种数据类型(文本、数字、图像等) |
Array 的支持 | 与 XML 相比,对数组的支持更多。 | 不支持或者较少支持数组。 |
对象的支持 | 对对象的本机支持。 | 对象必须通过惯例来表达。 |
AJAX 工具包支持 | 支持的。 | 未完全支持。 |
检索值 | 简单。 | 难的。 |
反序列化/序列化 | 完全自动化。 | 开发人员必须编写 Java脚本代码。 |
浏览器支持 | 大多数浏览器都支持。 | 跨浏览器的 XML 解析可能比较棘手。 |
喷码 | 仅支持UTF-8编码。 | 它支持各种编码。 |
显示功能 | 无显示功能。 | 提供显示功能。 |
文档大小 | 比 XML 小。 | 比 JSON 大。 |
文件扩展名 | .json | 。XML |
安全性 | Less 安全的。 | 比 JSON 更安全。 |
易于阅读 | 比较容易。 | 比较困难。 |
学习曲线 | 简单易学。 | 陡峭的学习曲线。 |
网站 | https://www.json.org/json-en.html | https://www.w3.org/TR/xml11/ |
基本 JSON 语法
{string:value, .......}
具有 JSON 和 XML 的相同示例
使用 JSON
{"books":[ {"name":"Anna Karenina", "author":"Leo Tolstoy"}, {"name":"One Hundred Years of Solitude", "author":"Gabriel Garcia Marquez"}, {"name":"The Great Gatsby", "author":"Scott Fitzgerald"}, {"name":"Invisible Man", "author":"Ralph Ellison"} ]}
使用 XML
<?xml version = "1.0" encoding = "UTF-8" ?> <books> <book> <name>Anna Karenina</name> <author>Leo Tolstoy</author> </book> <book> <name>One Hundred Years of Solitude</name> <author>Gabriel Garcia Marquez</author> </book> <book> <name>The Great Gatsby</name> <author>Scott Fitzgerald</author> </book> <book> <name>Invisible Man</name> <author>Ralph Ellison</author> </book> </books>
XML 文件类型定义 (DTD)
什么是DTD?
DTD代表 D占用 TYPE D定义。它使用一些合法元素来定义 XML 文档的结构。XML DTD 是可选的。
DTD 规则
以下列表显示了 DTD 规则。
- 如果存在 DTD,它必须出现在文档的开头(只有 XML 声明可以出现在 DTD 上方)。
- 元素声明必须以 ! 标记。
- 根元素的 DTD 名称和元素类型必须相同。
DTD 示例
内部 DTD 的示例:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE student [ <!ELEMENT student (firstname,lastname,school)> <!ELEMENT firstname (#PCDATA)> <!ELEMENT lastname (#PCDATA)> <!ELEMENT school (#PCDATA)> ]> <student> <firstname>Mark</firstname> <lastname>Wood</lastname> <school>Hills College</school> </student>
在上面的示例中,
- !DOCTYPE 学生 表示 DTD 声明的开始。 学生 是 XML 文档的根元素。
- !ELEMENT 学生 表示 学生 元素必须包含 名字,姓氏 和 学校 元素。
- !ELEMENT 名字 表示 名字 元素属于类型 #PC数据 (P烧毁 C破坏者 时间).
- !ELEMENT 姓氏 表示 姓氏 元素属于类型 #PC数据.
- !ELEMENT 学校 表示 学校 元素属于类型 #PC数据.
外部 DTD 的示例:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE student SYSTEM "student.dtd"> <student> <firstname>Mark</firstname> <lastname>Wood</lastname> <school>Hills College</school> </student>
DTD文件内容(student.dtd)如下。
<!ELEMENT student (firstname,lastname,school)> <!ELEMENT firstname (#PCDATA)> <!ELEMENT lastname (#PCDATA)> <!ELEMENT school (#PCDATA)>
XML DOM
什么是DOM?
DOM 代表 D占用 O对象 M模型。它定义了访问和操作 XML 文档的标准方式。DOM 具有(分层)树结构。
DOM 示例
让我们考虑下面的 XML 文档。
<?xml version="1.0" encoding="UTF-8" ?> <school> <student> <name> <first_name>Alex</first_name> <last_name>Clarke</last_name> </name> <age>14</age> <address>No. 35, Flower Road, Leeds</address> </student> </school>
上述 XML 文件的树结构如下图所示。

XML 验证
什么是格式良好的 XML 文档?
结构良好 XML文档是具有正确语法的XML文档。
什么是有效的 XML 文档?
有效 XML 文档格式良好,并且符合 DTD 规则。
XML 命名空间
为什么要使用命名空间?
命名空间有助于避免元素名称冲突。
命名空间声明
以下显示了命名空间声明的语法。
<element xmlns:name="URL">
在上述声明中,
- - xmlns 关键字表示命名空间的开始。
- - 姓名 是命名空间的前缀。
- - 网址 是命名空间标识符。
命名空间示例
下面的代码段显示了命名空间的一个示例。
<?xml version="1.0" encoding="UTF-8" ?> <abt:about xmlns:abt="https://www.guru99.com/about-us.html"> <abt:founder>Krishna</abt:founder> <abt:vision>Fun and Free Education for ALL</abt:vision> </abt:about>
XML 编辑器
有多种 XML 编辑器可用。任何文本编辑器(例如记事本等)都可以用作 XML 编辑器。
以下列表显示了 2021 年一些流行的 XML 编辑器。
1)XML记事本
XML Notepad 是一款开源的 XML 编辑器。它的左侧窗格显示树形视图和 XSL 输出,右侧窗格显示节点文本。底部显示错误调试窗口。
关键统计:
- 类型 – XML 编辑器
- 开发商—— Microsoft
- 支持的操作系统 – Microsoft Windows.
- 价格 – 免费
链接: http://microsoft.github.io/XmlNotepad/
2)Stylus Studio
Stylus Studio 是一个用以下语言编写的 IDE C++ 可扩展标记语言 (XML) 的缩写。它允许用户编辑和转换 XML 文档、电子数据交换 (EDI) 等数据、CSV 和关系数据。
关键统计:
- 类型 – XML 集成开发环境 (IDE)
- 开发商 – Progress Software Corporation
- 支持的操作系统 – Microsoft Windows.
- 价格 – 付费(请参阅下面给出的网站了解最新价格),提供免费试用。
链接: http://www.stylusstudio.com/
3) Altova XML间谍
XMLSpy 主要作为 JSON 和 XML 编辑器进行销售。它有一个内置的架构设计器和编辑器。它包括 Visual Studio 和 Eclipse 积分。
关键统计:
- 类型 – XML 编辑器
- 开发商—— Altova
- 支持的操作系统 – Microsoft Windows.
- 价格 – 付费(请参阅下面给出的网站了解最新价格),提供免费试用。
链接:https://www.altova.com/xmlspy-xml-editor
4)Oxygen XML编辑器
Oxygen XML 是一个跨平台编辑器,于 Java。它有助于验证 DTD、W3C XML Schema、RELAX NG、Schematron、NRL 和 NVDL 模式等模式。
关键统计:
- 类型 – XML 编辑器
- 开发商—— SyncRO 软件有限公司
- 支持的操作系统 – Windows、Linux 和 Mac OS X
- 价格 – 已付费(请参阅下面给出的网站了解最新价格
5)Xmplify
Xmplify XML Editor 提供了一个完全 XML 感知的编辑环境,具有基于 DTD 和 XML 模式的自动、自动文档验证等功能。
关键统计:
- 类型 – XML 编辑器
- 开发商 – MOSO 公司
- 支持的操作系统 - Mac OS。
- 价格 – 已付费(请参阅下面给出的网站了解最新价格
XML 解析器
XML 解析器是一个提供处理 XML 文档的接口的软件库。它检查 XML 文档的格式是否正确。一些解析器还可以验证 XML 文档。现代浏览器都带有 XML 解析器。
萨克斯
萨克斯 代表 Simple API 为 XML。这是一个 application p罗格拉姆 i接口(API) 用于解析 XML 文档。它们的行为类似于 Java.
与 DOM 不同,SAX 是基于事件的 XML 解析器的一个示例。
以下是 SAX 和 DOM 之间的一些重要区别。
萨克斯 | DOM | |
---|---|---|
代表 | XML的简单API | 文件对象模型 |
解析器的类型 | 基于事件 | 基于对象 |
读取和写入 XML | 只读 | 既读又写 |
插入/更新/删除节点 | 无法插入/更新/删除节点 | 可以插入/更新/删除节点 |
内存效率 | 良好的记忆效率 | 可变 |
速度 | 比 DOM 解析器慢 | 比 SAX 解析器更快 |
适合 | 小尺寸文件 | 大型文件 |
XML 数据绑定
XML 数据绑定是将 XML 文档中的数据表示为计算机内存中的业务对象。
XML 数据绑定有三种方法。
- 基于 XML 模式的数据绑定: 根据该模式创建相应的 XML 类。
- 基于类的数据绑定: 基于类创建相应的 XML 模式。
- 基于映射的数据绑定: 它描述了现有的 XML 模式如何映射到一组类(反之亦然)。
还有 XML 数据绑定框架。
例子:
使用框架可以轻松实现 XML 数据绑定。数据绑定框架会为您生成大量代码。您需要输入 DTD 或 XML 模式。
XML 模式
XML 架构 (也称为 XML 模式定义 or XSD) 用于描述 XML 文档结构。它是 DTD 的替代品。
为什么 Schema 很重要?
DTD 不如模式强大,因为它的可扩展性和灵活性不够。因此,它可能不适合某些情况。在这种情况下,模式很重要。使用 XML 模式的主要目的是定义 XML 文档的元素和属性。
XML Schema 与 DTD 有何不同?
以下比较显示了 XSD(XML Schema)与 DTD 的不同之处。
DTD | XSD | |
---|---|---|
代表 | 文件类型定义 | XML 架构定义 |
可扩展性 | 不可扩展 | 扩展 |
XML 结构的控制 | Less 控制 | 更多控制 |
支持的数据类型 | 不支持 | 支持 |
命名空间支持 | 不支持 | 支持 |
下面的代码段显示了 XML 模式的一个示例。
xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema"> <xs:element name = "employee"> <xs:complexType> <xs:sequence> <xs:element name = "firstname" type = "xs:string" /> <xs:element name = "lastname" type = "xs:string" /> <xs:element name = "phone" type = "xs:int" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
XML 的优点
以下是 XML 的优点/好处:
- 它使得数据传输和共享变得容易。
- XML 改善了不同平台之间的数据交换。
- 它是一种标记语言,是放置在文本文档中的一组字符或/和符号。
- XML 指示 XML 文档显示后应如何显示。
- 它简化了平台变更过程。
- 它提高了数据可用性。
- 它支持多语言文档和 Unicode。
- 提供相对容易学习和编码。
- 它是一种标记语言,是放置在文本文档中的一组字符或/和符号。
- 它使用 DTD 和 Schema 执行验证。
- 使文档可跨系统和应用程序传输。 借助 XML,您可以在不同平台之间快速交换数据。
- XML 将数据与 HTML 分离。
XML 的缺点
以下是使用 XML 的缺点/缺点:
- XML 需要处理应用程序。
- XML 语法类似于另一种替代的“基于文本”的数据传输格式,有时会造成混淆。
- 没有内部数据类型支持
- XML 语法是多余的。
- 不允许用户创建他的标签。
总结
- XML 代表可扩展标记语言。XML 是一种使用标记并可以扩展的语言(不是编程语言)。
- 主要目的是传输数据,而不是显示数据。
- XML 1.1 是最新版本。然而,XML 1.0 是最常用的版本。
- 除声明外,标签都是成对使用的。
- 开始标签 + 内容 + 结束标签 = 元素
- 实体是表示特殊字符的一种方式。
- DTD 代表文档类型定义。它使用一些合法元素来定义 XML 文档的结构。XML DTD 是可选的。
- DOM 代表文档对象模型。它定义了访问和操作 XML 文档的标准方式。
- 格式良好的 XML 文档是具有正确语法的 XML 文档。
- 有效的 XML 文档格式良好,并且符合 DTD 规则。
- 命名空间有助于避免元素名称冲突。