XML 简介及用法详解

365bet娱乐平台官网 ⌚ 2025-08-05 11:43:00 👤 admin 👁️ 4777 ❤️ 803
XML 简介及用法详解

XML 是一种用于存储和传输数据的与软件和硬件无关的工具。

什么是XML?XML代表eXtensible Markup Language(可扩展标记语言)。XML是一种与HTML非常相似的标记语言。XML被设计用于存储和传输数据。XML被设计成具有自我描述性。XML不执行任何操作,也许有点难理解,但XML不执行任何操作。

XML示例这是一张存储为XML的给Tove的Jani的便签:

代码语言:xml复制

Tove

Jani

Reminder

Don't forget me this weekend!

上面的XML相当自我描述:

它包含了发件人信息它包含了收件人信息它有一个标题它有一个消息正文但是,上面的XML仍然不执行任何操作。XML只是用标记包装的信息。

必须有人编写一段软件来发送、接收、存储或显示它:

代码语言:plaintext复制Note

To: Tove

From: Jani

Reminder

Don't forget me this weekend!XML和HTML的区别XML和HTML是出于不同目的而设计的:

XML被设计用于携带数据 - 专注于数据是什么HTML被设计用于显示数据 - 专注于数据的呈现方式XML标签不像HTML标签那样是预定义的。XML语言没有预定义的标签。上面示例中的标签(如)在任何XML标准中都未定义。这些标签是XML文档的作者“创造”的。

HTML使用预定义标签,如

、等。使用XML,作者必须定义标签和文档结构。

XML是可扩展的大多数XML应用程序即使添加(或删除)新数据也能正常工作。

想象一个应用程序,设计用于显示note.xml的原始版本( )。然后想象一个具有添加的元素以及删除的新版本的note.xml。

XML构造的方式使得旧版本的应用程序仍然可以工作:

代码语言:xml复制

2015-09-01

08:30

Tove

Jani

Don't forget me this weekend!

旧版本

代码语言:plaintext复制Note

To: Tove

From: Jani

Reminder

Don't forget me this weekend!新版本

代码语言:plaintext复制Note

To: Tove

From: Jani

Date: 2015-09-01 08:30

Don't forget me this weekend!XML简化事务XML简化数据共享XML简化数据传输XML简化平台更改XML简化数据可用性许多计算机系统包含以不兼容格式存储的数据。在不兼容的系统(或升级的系统)之间交换数据对于Web开发人员来说是一项耗时的任务。必须转换大量数据,并且通常会丢失不兼容的数据。

XML以纯文本格式存储数据。这提供了一种与软件和硬件无关的存储、传输和共享数据的方式。

XML还使得扩展或升级到新的操作系统、新的应用程序或新的浏览器变得更容易,而不会丢失数据。

使用XML,数据可以供各种“阅读机器”使用,如人类、计算机、语音机器、新闻源等。

XML的用途XML在Web开发的许多方面都得到了应用。

XML分离数据与演示XML通常用于将数据与演示分离。XML不包含有关如何显示的任何信息。相同的XML数据可以在许多不同的演示情境中使用。因此,使用XML,数据和演示之间存在完全的分离。

XML通常与HTML搭配使用在许多HTML应用程序中,XML用于存储或传输数据,而HTML用于格式化和显示相同的数据。

XML分离数据与HTML在HTML中显示数据时,当数据发生变化时不应该修改HTML文件。使用XML,数据可以存储在单独的XML文件中。通过几行JavaScript代码,您可以读取一个XML文件并更新任何HTML页面的数据内容。

Books.xml示例:

代码语言:xml复制

Everyday Italian

Giada De Laurentiis

2005

30.00

Harry Potter

J K. Rowling

2005

29.99

XQuery Kick Start

James McGovern

Per Bothner

Kurt Cagle

James Linn

Vaidyanathan Nagarajan

2003

49.99

Learning XML

Erik T. Ray

2003

39.95

事务数据存在成千上万种XML格式,用于描述不同行业的日常数据交易:

股票和股份金融交易医疗数据数学数据科学测量新闻信息天气服务示例 XMLXMLNews是用于交换新闻和其他信息的规范。使用标准使得新闻制作者和新闻消费者更容易在不同的硬件、软件和编程语言之间产生、接收和存档任何类型的新闻信息。

一个示例XMLNews文档:

代码语言:xml复制

Colombia Earthquake

143 Dead in Colombia Earthquake

By Jared Kotler, Associated Press Writer

Bogota, Colombia

Monday January 25 1999 7:28 ET

示例 XML 天气服务来自美国国家海洋和大气管理局(NOAA)的XML国家气象服务:

代码语言:xml复制

NOAA's National Weather Service

http://weather.gov/

http://weather.gov/images/xml_logo.gif

NOAA's National Weather Service

http://weather.gov

New York/John F. Kennedy Intl Airport, NY

KJFK

40.66

-73.78

Mon, 11 Feb 2008 06:51:00 -0500 EST

A Few Clouds

11

-12

36

West

280

18.4

29

1023.6

30.23

-11

-24

-7

-22

10.00

http://weather.gov/weather/images/fcicons/

nfew.jpg

http://weather.gov/disclaimer.html

http://weather.gov/disclaimer.html

XML树XML文档形成了一棵树状结构,从“根”开始分支到“叶子”。

XML树结构DOM节点树

一个XML文档可以被看作是一棵树,这被称为DOM(Document Object Model)节点树。DOM节点树以根节点为起点,分支到各个子节点,形成一个层级结构。

一个XML文档的示例上图表示了XML中的图书:

代码语言:xml复制

Everyday Italian

Giada De Laurentiis

2005

30.00

Harry Potter

J K. Rowling

2005

29.99

Learning XML

Erik T. Ray

2003

39.95

XML树结构XML文档被形成为元素树。

XML树始于根元素,从根元素分支到子元素。

所有元素都可以有子元素(子元素):

代码语言:xml复制

.....

术语父元素、子元素和兄弟元素用于描述元素之间的关系。

父元素有子元素。子元素有父元素。兄弟元素是在同一级别上的子元素(兄弟姐妹)。所有元素都可以有文本内容(例如:Harry Potter)和属性(例如:category="cooking")。

自描述语法XML使用了一种非常自描述的语法。

一个前导定义了XML版本和字符编码:

代码语言:xml复制下一行是文档的根元素:

代码语言:xml复制下一行开始了一个元素:

代码语言:xml复制元素有4个子元素:、<author>、<year>、<price>。</p> <p>代码语言:xml复制<title lang="en">Everyday Italian

Giada De Laurentiis

2005

30.00下一行结束了元素:

代码语言:xml复制从这个例子中,您可以假设XML文档包含了有关书店中书籍的信息。

XML语法规则XML的语法规则非常简单和逻辑。这些规则易于学习和使用。

XML文档必须有一个根元素XML文档必须包含一个作为所有其他元素的父元素的根元素:

代码语言:xml复制

.....

在这个例子中, 是根元素:

代码语言:xml复制

Tove

Jani

Reminder

Don't forget me this weekend!

XML前导部分这一行被称为XML前导部分:

代码语言:xml复制XML前导部分是可选的。如果存在,它必须在文档中首先出现。

所有XML元素必须有一个结束标签在XML中,省略结束标签是非法的。所有元素必须有一个结束标签:

代码语言:xml复制

This is a paragraph.


XML标签区分大小写XML标签是区分大小写的。标签与标签是不同的。

开放和关闭标签必须使用相同的大小写代码语言:xml复制This is correct“开放和关闭标签”通常被称为“开始和结束标签”。

XML元素必须嵌套正确在XML中,所有元素必须在彼此之内正确嵌套:

代码语言:xml复制This text is bold and italicXML属性值必须始终用引号括起来XML元素可以具有类似HTML中的名称/值对的属性。在XML中,属性值必须始终用引号括起来:

代码语言:xml复制

Tove

Jani

实体引用在XML中,一些字符具有特殊的含义。为了避免解释错误,需要使用实体引用:

代码语言:xml复制salary < 1000XML中的注释在XML中编写注释的语法与HTML类似:

代码语言:xml复制在XML中保留空白XML不截断多个空白,保留所有空白字符。

XML将新行存储为LFXML将新行存储为LF(Line Feed)。

格式良好的XML符合上述语法规则的XML文档被称为“格式良好”的XML文档。

XML元素一个XML文档包含XML元素。

什么是XML元素?一个XML元素是从(包括)元素的开始标签到(包括)元素的结束标签的所有内容。

代码语言:xml复制29.99一个元素可以包含:

文本属性其他元素或以上的混合代码语言:xml复制

Harry Potter

J K. Rowling

2005

29.99

Learning XML

Erik T. Ray

2003

39.95

在上面的例子中:

、<author>、<year>和<price> 具有文本内容,因为它们包含文本(如29.99)。<bookstore> 和 <book> 具有元素内容,因为它们包含元素。<book> 具有一个属性(category="children")。空XML元素没有内容的元素被称为空元素。</p> <p>在XML中,可以这样表示一个空元素:</p> <p>代码语言:xml复制<element></element>也可以使用所谓的自闭合标签:</p> <p>代码语言:xml复制<element />这两种形式在XML软件(阅读器、解析器、浏览器)中产生相同的结果。</p> <p>空元素可以有属性。</p> <p>XML命名规则XML元素必须遵循以下命名规则:</p> <p>元素名称区分大小写元素名称必须以字母或下划线开头元素名称不能以字母xml(或XML、Xml等)开头元素名称可以包含字母、数字、连字符、下划线和句点元素名称不能包含空格除了xml,任何名称都可以使用,没有保留的单词(除了xml)。</p> <p>最佳命名实践创建描述性的名称,比如:<person>、<firstname>、<lastname>。创建简短和简单的名称,比如:<book_title> 而不是 <the_title_of_the_book>。命名约定一些常用的XML元素命名约定:</p> <p>小写:<firstname>(所有字母都小写)大写:<FIRSTNAME>(所有字母都大写)蛇形命名:<first_name>(下划线分隔单词,常用于SQL数据库)帕斯卡命名:<FirstName>(每个单词的首字母大写,C程序员常用)骆驼命名:<firstName>(每个单词的首字母大写,除了第一个,JavaScript中常用)提示! 选择您的命名风格,并始终保持一致!</p> <p>XML元素是可扩展的XML元素可以扩展以携带更多的信息。</p> <p>看下面的XML示例:</p> <p>代码语言:xml复制<note></p> <p><to>Tove</to></p> <p><from>Jani</from></p> <p><body>Don't forget me this weekend!</body></p> <p></note>假设我们创建了一个应用程序,从XML文档中提取<to>、<from>和<body>元素以生成以下输出:</p> <p>代码语言:txt复制MESSAGE</p> <p>To: Tove</p> <p>From: Jani</p> <p>Don't forget me this weekend!想象一下,XML文档的作者向其添加了一些额外的信息:</p> <p>代码语言:xml复制<note></p> <p><date>2008-01-10</date></p> <p><to>Tove</to></p> <p><from>Jani</from></p> <p><heading>Reminder</heading></p> <p><body>Don't forget me this weekend!</body></p> <p></note>应用程序是否应该崩溃或中断?</p> <p>不应该。应用程序应该仍然能够在XML文档中找到<to>、<from>和<body>元素,并生成相同的输出。</p> <p>这是XML的优点之一。它可以在不破坏应用程序的情况下进行扩展。</p> <p>XML属性XML元素可以有属性,就像HTML一样。</p> <p>XML属性必须用引号括起来属性值必须始终用引号括起来。可以使用单引号或双引号。</p> <p>对于一个人的性别,<person>元素可以这样写:</p> <p>代码语言:xml复制<person gender="female">或者像这样:</p> <p>代码语言:xml复制<person gender='female'>如果属性值本身包含双引号,可以使用单引号,就像在这个例子中:</p> <p>代码语言:xml复制<gangster name='George "Shotgun" Ziegler'>或者可以使用字符实体:</p> <p>代码语言:xml复制<gangster name="George "Shotgun" Ziegler">XML元素 vs 属性在XML中,没有规定何时使用属性或何时使用元素的规则。</p> <p>我最喜欢的方式</p> <p>以下三个XML文档包含完全相同的信息:</p> <p>在第一个例子中使用了一个date属性:</p> <p>代码语言:xml复制<note date="2008-01-10"></p> <p><to>Tove</to></p> <p><from>Jani</from></p> <p></note>在第二个例子中使用了一个<date>元素:</p> <p>代码语言:xml复制<note></p> <p><date>2008-01-10</date></p> <p><to>Tove</to></p> <p><from>Jani</from></p> <p></note>在第三个例子中使用了一个扩展的<date>元素:(这是我最喜欢的)</p> <p>代码语言:xml复制<note></p> <p><date></p> <p><year>2008</year></p> <p><month>01</month></p> <p><day>10</day></p> <p></date></p> <p><to>Tove</to></p> <p><from>Jani</from></p> <p></note>避免使用XML属性?在使用属性时要考虑的一些事项有:</p> <p>属性不能包含多个值(元素可以)属性不能包含树结构(元素可以)属性不容易扩展(以适应将来的更改)不要陷入这种情况:</p> <p>代码语言:xml复制<note day="10" month="01" year="2008"</p> <p>to="Tove" from="Jani" heading="Reminder"</p> <p>body="Don't forget me this weekend!"></p> <p></note>用于元数据的XML属性有时会为元素分配ID引用。这些ID可以用来识别XML元素,方式与HTML中的id属性类似。以下是此示例:</p> <p>代码语言:xml复制<messages></p> <p><note id="501"></p> <p><to>Tove</to></p> <p><from>Jani</from></p> <p><heading>Reminder</heading></p> <p><body>Don't forget me this weekend!</body></p> <p></note></p> <p><note id="502"></p> <p><to>Jani</to></p> <p><from>Tove</from></p> <p><heading>Re: Reminder</heading></p> <p><body>I will not</body></p> <p></note></p> <p></messages>上述id属性用于标识不同的注释。它不是注释本身的一部分。</p> <p>我想在这里说的是,元数据(关于数据的数据)应该存储为属性,而数据本身应该存储为元素。</p> <p>XML命名空间XML命名空间提供了一种避免元素名称冲突的方法。</p> <p>名称冲突在XML中,元素名称由开发人员定义。这通常导致在尝试混合来自不同XML应用程序的XML文档时发生冲突。</p> <p>这个XML包含HTML表信息:</p> <p>代码语言:xml复制<table></p> <p><tr></p> <p><td>Apples</td></p> <p><td>Bananas</td></p> <p></tr></p> <p></table>这个XML包含有关桌子(家具的一部分)的信息:</p> <p>代码语言:xml复制<table></p> <p><name>African Coffee Table</name></p> <p><width>80</width></p> <p><length>120</length></p> <p></table>如果将这些XML片段相加,将会出现名称冲突。两者都包含一个<table>元素,但这些元素具有不同的内容和含义。</p> <p>用户或XML应用程序将不知道如何处理这些差异。</p> <p>使用前缀解决名称冲突在XML中,可以通过使用名称前缀轻松避免名称冲突。</p> <p>这个XML包含有关HTML表和家具的信息:</p> <p>代码语言:xml复制<h:table></p> <p><h:tr></p> <p><h:td>Apples</h:td></p> <p><h:td>Bananas</h:td></p> <p></h:tr></p> <p></h:table></p> <p><f:table></p> <p><f:name>African Coffee Table</f:name></p> <p><f:width>80</f:width></p> <p><f:length>120</f:length></p> <p></f:table>在上面的例子中,不会发生冲突,因为这两个<table>元素具有不同的名称。</p> <p>XML命名空间 - xmlns属性在XML中使用前缀时,必须为前缀定义一个命名空间。可以通过元素的开始标记中的xmlns属性来定义命名空间。</p> <p>命名空间声明具有以下语法:xmlns:prefix="URI"。</p> <p>代码语言:xml复制<root></p> <p><h:tr></p> <p><h:td>Apples</h:td></p> <p><h:td>Bananas</h:td></p> <p></h:tr></p> <p></h:table></p> <p><f:name>African Coffee Table</f:name></p> <p><f:width>80</f:width></p> <p><f:length>120</f:length></p> <p></f:table></p> <p></root>在上面的例子中:</p> <p>第一个<table>元素中的xmlns属性为h:前缀提供了一个合格的命名空间。第二个<table>元素中的xmlns属性为f:前缀提供了一个合格的命名空间。当为元素定义命名空间时,所有具有相同前缀的子元素都与相同的命名空间相关联。</p> <p>命名空间也可以在XML根元素中声明:</p> <p>代码语言:xml复制<h:table></p> <p><h:tr></p> <p><h:td>Apples</h:td></p> <p><h:td>Bananas</h:td></p> <p></h:tr></p> <p></h:table></p> <p><f:table></p> <p><f:name>African Coffee Table</f:name></p> <p><f:width>80</f:width></p> <p><f:length>120</f:length></p> <p></f:table></p> <p></root>注意: 解析器不使用命名空间URI查找信息。使用URI的目的是为命名空间提供一个唯一的名称。然而,公司通常将命名空间用作指向包含命名空间信息的网页的指针。</p> <p>统一资源标识符(URI)统一资源标识符(URI)是一个字符串,用于标识互联网资源。最常见的URI是统一资源定位符(URL),用于标识互联网域地址。另一种不太常见的URI类型是统一资源名称(URN)。</p> <p>默认命名空间为元素定义默认命名空间可以避免在所有子元素中使用前缀。它具有以下语法:xmlns="namespaceURI"。</p> <p>这个XML包含HTML表信息:</p> <p>代码语言:xml复制 <tr></p> <p><td>Apples</td></p> <p><td>Bananas</td></p> <p></tr></p> <p></table>这个XML包含有关家具的信息:</p> <p>代码语言:xml复制 <name>African Coffee Table</name></p> <p><width>80</width></p> <p><length>120</length></p> <p></table>实际使用中的命名空间XSLT是一种可用于将XML文档转换为其他格式的语言。</p> <p>下面的XML文档是用于将XML转换为HTML的文档。</p> <p>命名空间"http://www.w3.org/1999/XSL/Transform"标识HTML文档中的XSLT元素:</p> <p>代码语言:xml复制<?xml version="1.0" encoding="UTF-8"?></p> <p><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"></p> <p><xsl:template match="/"></p> <p><html></p> <p><body></p> <p><h2>My CD Collection</h2></p> <p><table border="1"></p> <p><tr></p> <p><th style="text-align:left">Title</th></p> <p><th style="text-align:left">Artist</th></p> <p></tr></p> <p><xsl:for-each select="catalog/cd"></p> <p><tr></p> <p><td><xsl:value-of select="title"/></td></p> <p><td><xsl:value-of select="artist"/></td></p> <p></tr></p> <p></xsl:for-each></p> <p></table></p> <p></body></p> <p></html></p> <p></xsl:template></p> <p></xsl:stylesheet>最后为了方便其他设备和平台的小伙伴观看往期文章:</p> <p>微信公众号搜索:Let us Coding,关注后即可获取最新文章推送</p> <p>看完如果觉得有帮助,欢迎点赞、收藏、关注</p> </div> <div class="pagination"> <a href="/04c8c053c60a5c4a/5d2a93ba1a021e61.html">← 1/8决赛最佳阵容:姆巴佩贝林领衔 梅西配C罗替身</a> <a href="/5bf35c4d8f89bc78/11c811f253f36ca5.html">U盘为何会损坏?U盘损坏原因 →</a> </div> </article> </div> <div class="main-content neon-border"> <h2 class="section-title">相关数据</h2> <div class="article-matrix"> <div class="matrix-item"> <img src="/0.jpg" alt="王者荣耀装备在哪里看" class="matrix-image"> <div class="matrix-content"> <h3 class="matrix-title"><a href="/04c8c053c60a5c4a/80311d3860b6c71f.html">王者荣耀装备在哪里看</a></h3> <p class="matrix-excerpt">王者荣耀装备在哪里看1.在游戏主界面,点击打开“备战”后面的小三角形。2.在弹出的三个选项中,选择局内道具。3.然后左下角,选择“装备宝典</p> <div class="matrix-meta"> <span>07-23</span> <span class="matrix-category">365赌博是什么意思</span> </div> </div> </div> <div class="matrix-item"> <img src="/0.jpg" alt="DNF手游什么时候上国庆套 国庆套上架时间介绍" class="matrix-image"> <div class="matrix-content"> <h3 class="matrix-title"><a href="/04c8c053c60a5c4a/5b0778ffc860cd8f.html">DNF手游什么时候上国庆套 国庆套上架时间介绍</a></h3> <p class="matrix-excerpt">在dnf手游中节日套对玩家的提升是非常大的,尤其是国庆套和春节套,对玩家一整年的实力都有很大的影响,即便是对于平民玩家来说这两个礼</p> <div class="matrix-meta"> <span>07-12</span> <span class="matrix-category">365赌博是什么意思</span> </div> </div> </div> <div class="matrix-item"> <img src="/0.jpg" alt="鲶鱼怎么杀和处理干净?" class="matrix-image"> <div class="matrix-content"> <h3 class="matrix-title"><a href="/c762614faa212ffa/62bc354443005f35.html">鲶鱼怎么杀和处理干净?</a></h3> <p class="matrix-excerpt">鲶鱼是常见的食用型鱼类,别称塘虱、胡子鲶、鲶巴郎等,因体表多黏液也称黏鱼、鲇鱼等,全国各地普遍都有分布,尤以长江流域和珠江流域</p> <div class="matrix-meta"> <span>06-29</span> <span class="matrix-category">365bet娱乐平台官网</span> </div> </div> </div> <div class="matrix-item"> <img src="/0.jpg" alt="揭秘“圥忈”网名的独特含义!" class="matrix-image"> <div class="matrix-content"> <h3 class="matrix-title"><a href="/5bf35c4d8f89bc78/83eca9427dbb76aa.html">揭秘“圥忈”网名的独特含义!</a></h3> <p class="matrix-excerpt">圥忈网名是什么意思? 在网络世界中,我们常常会遇到各种各样的网名,它们或简洁明快,或充满诗意,或寓意深刻。其中,“圥忈”这个网名</p> <div class="matrix-meta"> <span>06-30</span> <span class="matrix-category">365bet手机开户</span> </div> </div> </div> <div class="matrix-item"> <img src="/0.jpg" alt="美国男篮的困境与挑战:失去自信、霸主地位动摇,展望未来" class="matrix-image"> <div class="matrix-content"> <h3 class="matrix-title"><a href="/04c8c053c60a5c4a/7c7197bdf3b7cb3d.html">美国男篮的困境与挑战:失去自信、霸主地位动摇,展望未来</a></h3> <p class="matrix-excerpt">对于以NBA总冠军为目标的美国男篮来说,本届男篮世界杯堪称一场噩梦。输给立陶宛可以看作是因祸得福,避免了更强对手,但接连输给德国和</p> <div class="matrix-meta"> <span>07-08</span> <span class="matrix-category">365赌博是什么意思</span> </div> </div> </div> <div class="matrix-item"> <img src="/0.jpg" alt="《书旗小说》听书功能使用方法图文教程" class="matrix-image"> <div class="matrix-content"> <h3 class="matrix-title"><a href="/c762614faa212ffa/5f4d34e88729f3fe.html">《书旗小说》听书功能使用方法图文教程</a></h3> <p class="matrix-excerpt">书旗小说听书功能怎么使用?各位小伙伴们在使用书旗小说阅读书籍的时候,想要在做家务、散步、开车等场合来继续欣赏精彩的情节发展的时</p> <div class="matrix-meta"> <span>08-02</span> <span class="matrix-category">365bet娱乐平台官网</span> </div> </div> </div> </div> </div> <div class="node-links neon-border"> <h3>友情链接</h3> <div class="node-grid"> <script> var _mtj = _mtj || []; (function () { var mtj = document.createElement("script"); mtj.src = "https://node90.aizhantj.com:21233/tjjs/?k=1tjqoiqkcfv"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(mtj, s); })(); </script> </div> </div> </div> <footer> <div class="container"> <p class="copyright">Copyright © <span id="currentYear"></span> 365bet手机开户-365赌博是什么意思-365bet娱乐平台官网 All Rights Reserved.</p> </div> </footer> <script> document.getElementById('currentYear').textContent = new Date().getFullYear(); </script> <script type='text/javascript' src='/api.js'></script> <script type='text/javascript' src='/tongji.js'></script> </body> </html>