XML代表可扩展标记语言。 它是一种使用标记并且可以扩展的语言(不是编程语言)。 它源自标准通用标记语言(SGML)。 XML还使用DTD(文档类型定义)来定义XML文档结构。
XML不用于处理计算操作和算法。 因此,XML不是一种编程语言。 主要目标是传输数据,而不是显示信息。 XML弥合了人类可读性和机器可读性之间的鸿沟。 与HTML标签不同,XML标签具有自我描述性。
XML是一种开放格式。 XML的文件扩展名是.xml。
XML的历史可以追溯到1996年,并于1998年首次发布。World Wide Web Consortium(W3C)是XML的开发者,并于1998年成为W3C的推荐。
有两种版本的XML。
XML 1.1是最新版本。但是,XML 1.0是最常用的版本。
XML的编辑器是:
这是XML的一些重要功能:
编码是将Unicode字符转换为它们的二进制表示形式。 UTF用于XML编码。 UTF代表UCS(UCS代表通用字符集)转换格式。
主要有两种类型的UTF编码。
例子:
<?xml version="1.0" encoding="UTF-8"?>
它使用16位来表示字符。
例子:
<?xml version="1.0" encoding="UTF-16"?>
您可以在XML声明中使用编码。 UTF-8是XML的默认编码。
下面的代码段显示了基本的XML语法。
<?xml version = "1.0" encoding = "UTF-8" ?>
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
XML声明由XML版本,字符编码或/和独立状态组成。 该声明是可选的。
XML声明的语法
下面的代码段显示了XML声明的语法。
<?xml version="version_number," encoding="character_encoding" standalone="yes_or_no" ?>
XML声明规则
以下是XML声明规则。
XML声明示例
以下代码段显示了XML声明的示例。
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
注释是可选的。 添加注释有助于理解文档内容。
XML注释的语法
注释以 <!– 开始,以 –> 结尾.。
以下代码段显示了XML注释的语法。
<!-- Add your comment here -->
标签除声明外均成对使用。 每个标签对都由一个开始标签(也称为开始标签)和一个结束标签(也称为结束标签)组成。
标记名称包含在<>中。 对于特定的标签对,开始标签和结束标签必须相同,除了结束标签在<后面有/之外。
<name>...</name>
开头和结尾标签之间的任何内容都称为内容。
开头标签,内容和结束标签统称为元素。
Opening tag + content + closing tag = an element
注意:元素也可能包含属性。 您将很快学习这些属性。
让我们考虑以下要素。
<age>20</age>
在以上元素中,
age是元素的名称。
注意:标签名称也称为元素或元素名称。
如果标签之间没有内容,如下所示,则称为空标签。
<result></result>
XML标签和元素规则
以下列表显示了XML标签和元素规则。
例子:
正确的:
<age>20</age>
错误的:
<age>20</Age>
注意:AGE,Age和age是XML中的三个不同名称。
例子:
正确的:
<b><u>This text is bold and italic</u></b>
错误的:
<b><u>This text is bold and italic.</b></u>
元素的属性放置在开始标签中的标签名称之后。 您可以为具有不同属性名称的单个元素添加多个属性。
让我们考虑下面的XML文档。
<company name="ABC Holdings" location="London">
<chairman>Mr. John</chairman>
<gm>Mr. Wood</gm>
</company>
公司元素中有两个属性,即名称和位置。
让我们研究一下name属性,
注意:属性名称也称为属性。
另外,请注意,在上面的示例中,company 是根元素。
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中,主题是元素。
什么是XML实体?
简而言之,实体是表示特殊字符的一种方式。 实体也称为实体引用。
为什么需要XML实体?
XML中保留了某些字符(例如“,&<等),它们被称为特殊字符,不能直接用于其他目的。
例如,<和>符号a用于标记。 您不能直接从键盘上键入小于或大于符号。 相反,您需要使用实体。
下表显示了一些流行的XML实体。
字符 | 描述 | Entity Name | Usage |
---|---|---|---|
“ | 引号(双引号) | quot | " |
& | &符 | amp | & |
‘ | 撇号(单引号) | apos | ' |
< | 小于符号 | lt | < |
> | 大于符号 | gt | > |
Example:
<friend>
<name>My friends are Alice & Jane.</name>
</friend>
HTML和XML之间的相似之处
以下列表显示了HTML和XML之间的相似之处。
HTML和XML之间的差异
即使XML就像HTML,XML也不能替代HTML。 HTML和XML之间也有一些明显的区别。
下表列出了HTML和XML之间的比较。
代表 | 超文本标记语言 | 可扩展标记语言 |
语言种类 | 预定义的标记语言。 | 用于指定标记语言的框架。 |
结构细节 | 不提供。 | 提供。 |
目的 | 用于显示数据。 | 用于传输数据 |
驱动 | 格式驱动。 | 内容驱动。 |
Nature | 具有静态性质。 | 具有动态性。 |
Tag类型 | 预定义标签。 | 用户定义的标签。 |
Tag限制 | 数量有限的标签可用。 | 标签是可扩展的。 |
结束标签 | 使用结束标记不是必需的(但建议使用结束标记)。 | 结束标记是强制性的。 |
命名空间支持 | 不支持。 | 支持。 |
区分大小写 | 标签不区分大小写。 | 标签区分大小写。 |
空格 | 空白不能保留(可以忽略空白)。 | 保留空白(不能忽略空白)。 |
用JavaScript解析 | 不需要任何额外的应用程序。 | 需要DOM实现。 |
代码嵌套 | 不一定需要。 | 需要。 |
Errors | 可以忽略小错误。 | 不允许出现错误。 |
文件扩展名 | .html or .htm | .xml |
大小 | 较大。 | 比较小。 |
引号 | 属性值不需要引号。 | XML属性值必需。 |
对象支持 | 提供本机对象支持。 | 对象必须由约定表示。 |
null支持 | 本机识别空值。 | 需要在元素上使用xsi:nil。 |
格式决定 | 提供应用程序数据的直接映射。 | 需要更大的努力。 |
学习曲线 | 与XML相比,学习曲线不那么陡峭。 | 陡峭的学习曲线。 |
网站 | https://html.spec.whatwg.org/ | https://www.w3.org/TR/xml11/ |
<!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 version = "1.0" encoding = "UTF-8" ?>
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
With 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>
With 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之间的差异
XML和JSON之间也有一些区别。
下表显示了JSON和XML之间的比较。
内容 | JSON | XML |
代表 | JavaScript对象表示法 | 可扩展标记语言 |
延伸自 | JavaScript | SGML |
数据存储 | 数据存储为键值对。 | 数据存储为树状结构。 |
命名空间 | 不支持名称空间。 | 支持名称空间。 |
注释 | 不支持添加注解。 | 可以添加注解。 |
数据可访问性 | 可以作为JSON对象轻松访问。 | 数据需要解析。 |
元数据 | 不支持添加元数据。 | 可以写元数据。 |
类型 | JSON 类型: string, number, array, Boolean. | 所有XML数据都应该是字符串。 |
支持的数据类型 | 仅支持文本和数字数据类型。 | 支持多种数据类型(文本,数字,图像等) |
数组的支持 | 与XML相比,对数组的更多支持. | 没有或更少支持数组。 |
对象的支持 | 对对象的本机支持。 | 该对象必须通过约定表示。 |
AJAX工具包支持 | 支持的。 | 不完全支持。 |
检索值 | 简单的。 | 难的。 |
反序列化/序列化 | 完全自动化。 | 开发人员必须编写JavaScript代码。 |
浏览器支持 | 大多数浏览器都支持。 | 跨浏览器的XML解析可能很棘手。 |
编码方式 | 仅支持UTF-8编码。 | 它支持各种编码。 |
显示能力 | 没有显示功能。 | 提供显示功能。 |
文件尺寸 | 比XML小。 | 比JSON大。 |
文件扩展名 | .json | .xml |
安全 | 不太安全。 | 比JSON更安全。 |
易于阅读 | 比较容易。 | 比较困难。 |
学习曲线 | 简单易学。 | 陡峭的学习曲线。 |
Website | https://www.json.org/json-en.html | https://www.w3.org/TR/xml11/ |
{string:value, .......}
With 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"}
]}
With 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>
什么是DTD?
DTD代表文档类型定义。 它使用一些法律元素定义了XML文档的结构。 XML DTD是可选的。
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>
在上面的示例中,
外部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)>
什么是DOM?
DOM代表文档对象模型。 它定义了访问和处理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文档格式正确,并且符合DTD规则。
为什么命名空间?
命名空间有助于避免元素名称冲突。
命名空间声明
以下显示了名称空间声明的语法。
<element xmlns:name="URL">
在以上声明中,
命名空间的例子
以下代码段显示了名称空间的示例。
<?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编辑器。
以下列表显示了2021年一些流行的XML编辑器。
1)XML记事本:
XML Notepad是XML的开源编辑器。它具有树视图,左侧窗格具有XSL输出,右侧具有节点文本。它的底部有一个错误调试窗口。
关键统计数据:
链接:http://microsoft.github.io/XmlNotepad/
2)Stylus Studio:
Stylus Studio是用C ++编写的可扩展标记语言(XML)的IDE。它允许用户编辑和转换XML文档,诸如电子数据交换(EDI),CSV和关系数据之类的数据。
关键统计数据:
链接:http://www.stylusstudio.com/
3)Altova XMLSpy:
XMLSpy主要作为JSON和XML编辑器销售。它具有内置的模式设计器和编辑器。它包括Visual Studio和Eclipse的集成。
关键统计数据:
链接:https://www.altova.com/xmlspy-xml-editor
4)Oxygen XML编辑器:
Oxygen XML是用Java开发的跨平台编辑器。它有助于验证DTD,W3C XML模式,RELAX NG,Schematron,NRL和NVDL模式等模式。
关键统计数据:
链接:https://www.oxygenxml.com/
5)Xmplify:
Xmplify XML Editor提供了一个完全基于XML的编辑环境,具有基于DTD和XML Schema的自动,自动文档验证等。
关键统计数据:
链接:http://xmplifyapp.com/
XML解析器是一个软件库,提供了使用XML文档的接口。它检查XML文档的格式是否正确。一些解析器还可以验证XML文档。现代浏览器随附XML解析器。
SAX
SAX代表XML的简单API。它是用于解析XML文档的应用程序接口(API)。它们的行为类似于Java中的事件处理程序。
与DOM不同,SAX是基于事件的XML解析器的示例。
这是SAX和DOM之间的一些重要区别。
SAX | DOM | |
代表 | XML的简单API | 文件对象模型 |
解析器类型 | 基于事件 | 基于对象 |
读写XML | 只读 | 读写 |
插入/更新/删除节点 | 无法插入/更新/删除节点 | 可以插入/更新/删除节点 |
存储效率 | 良好的内存效率 | 变化 |
速度 | 比DOM解析器慢 | 比SAX Parser更快 |
适合于 | 小型文件 | 大文件 |
XML数据绑定是将XML文档中的数据表示为计算机内存中的业务对象。
XML数据绑定有三种方法。
也有XML数据绑定框架。
例子:
XML数据绑定使用框架很容易。数据绑定框架会为您生成大量代码。您需要输入DTD或XML模式。
XML模式(也称为XML模式定义或XSD)用于描述XML文档结构。它是DTD的替代方法。
为什么架构很重要?
DTD不能作为模式强大,因为它没有足够的可扩展性和灵活性。因此,它可能不适用于某些情况。在这种情况下,方案很重要。使用XML模式的主要目的是定义XML文档的元素和属性。
XML模式与DTD有何不同?
以下比较显示XSD(XML架构)与DTD有何不同。
DTD | XSD | |
代表 | 文件类型定义 | XML模式定义 |
可扩展性 | 不可扩展 | 可扩展 |
控制XML结构 | 更少的控制 | 更多控制 |
支持的数据类型 | 不支持 | 支持 |
命名空间支持 | 不支持 | 支持 |
以下代码段显示了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的缺点/缺点: