加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML学习笔记

发布时间:2020-12-16 05:54:13 所属栏目:百科 来源:网络整理
导读:可扩展标记语言xml(eXtensibleMarkupLanguage) 可扩展标记语言,标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。它非常适合万维网传输,提

可扩展标记语言xml(eXtensibleMarkupLanguage)

可扩展标记语言,标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

XML被设计用来传输和存储数据;

超文本标记语言(HTML)被设计用来显示数据;

它们都是标准通用标记语言的子集。

一、什么是可扩展标记语言(XML)

可扩展标记语言是一种很像超文本标记语言的标记语言。它的设计宗旨是传输数据,而不是显示数据。它的标签没有被预定义。您需要自行定义标签。它被设计为具有自我描述性。它是W3C的推荐标准。

二、可扩展标记语言(XML)和超文本标记语言(HTML)之间的差异

它不是超文本标记语言的替代。

它是对超文本标记语言的补充。

它和超文本标记语言为不同的目的而设计:

它被设计用来传输和存储数据,其焦点是数据的内容。

超文本标记语言被设计用来显示数据,其焦点是数据的外观。

超文本标记语言旨在显示信息,而它旨在传输信息。

对它最好的描述是:它是独立于软件和硬件的信息传输工具。

注意:XML没有任何行为

XML是不作为的。也许这有点难以理解,但是XML不会做任何事情。XML被设计用来结构化、存储以及传输信息。

下面是John写给George的便签,存储为XML

<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

上面的这条便签具有自我描述性。它拥有标题以及留言,同时包含了发送者和接受者的信息。

但是,这个XML文档仍然没有做任何事情。它仅仅是包装在XML标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。

三、XML的用途

XML应用于web开发的许多方面,常用于简化数据的存储和共享。

XML把数据从HTML分离。如果你需要在HTML文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑HTML。通过XML,数据能够存储在独立的XML文件中。这样你就可以专注于使用HTML进行布局和显示,并确保修改底层数据不再需要对HTML进行任何的改变。通过使用几行JavaScript,你就可以读取一个外部XML文件,然后更新HTML中的数据内容。

XML简化数据共享。在真实的世界中,计算机系统和数据使用不兼容的格式来存储数据。

XML数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。

这让创建不同应用程序可以共享的数据变得更加容易。

XML简化数据传输。通过XML,可以在不兼容的系统之间轻松地交换数据。对开发人员来说,其中一项最费时的挑战一直是在因特网上的不兼容系统之间交换数据。由于可以通过各种不兼容的应用程序来读取数据,以XML交换数据降低了这种复杂性。

四、XML树结构

XML文档形成了一种树结构,它从根部开始,然后扩展到枝叶

一个XML文档实例。XML使用简单的具有自我描述性的语法:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

第一行是XML声明。它定义XML的版本(1.0)和所使用的编码(ISO-8859-1=Latin-1/西欧字符集)

下一行描述文档的根元素(像在说:本文档是一个便签):

<note>

接下来4行描述根的4个子元素(to,from,heading以及body):

<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>

最后一行定义根元素的结尾:

</note>

从本例可以设想,该XML文档包含了JohnGeorge的一张便签。

说明:

XML文档形成一种树结构

XML文档必须包含根元素。该元素是所有其他元素的父元素。

XML文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。

所有元素均可拥有子元素:

<root>
  <child>
    <subchild>.....</subchild>
  </child>
</root>

父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹)。

所有元素均可拥有文本内容和属性(类似HTML中)。实例



上图表示下面的XML中的一本书:

<bookstore>
<book category="COOKING">
  <title lang="en">Everyday Italian</title> 
  <author>Giada De Laurentiis</author> 
  <year>2005</year> 
  <price>30.00</price> 
</book>
<book category="CHILDREN">
  <title lang="en">Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>
<book category="WEB">
  <title lang="en">Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
</bookstore>

例子中的根元素是<bookstore>。文档中的所有<book>元素都被包含在<bookstore>中。

<book>元素有4个子元素:<title><author><year><price>

所有XML元素都须有关闭标签

HTML,经常会看到没有关闭标签的元素:

<p>Thisisaparagraph

<p>Thisisanotherparagraph

XML中,省略关闭标签是非法的。所有元素都必须有关闭标签:

<p>Thisisaparagraph</p>

<p>Thisisanotherparagraph</p>

注释:您也许已经注意到XML声明没有关闭标签。这不是错误。声明不属于XML本身的组成部分。它不是XML元素,也不需要关闭标签。

XML标签对大小写敏感

XML元素使用XML标签进行定义。

XML标签对大小写敏感。在XML中,标签<Letter>与标签<letter>是不同的。

必须使用相同的大小写来编写打开标签和关闭标签:

<Message>这是错误的。</message>

<message>这是正确的。</message>

注释:打开标签和关闭标签通常被称为开始标签和结束标签。不论您喜欢哪种术语,它们的概念都是相同的。

XML必须正确地嵌套

HTML中,常会看到没有正确嵌套的元素:

<b><i>Thistextisboldanditalic</b></i>

XML中,所有元素都必须彼此正确地嵌套:

<b><i>Thistextisboldanditalic</i></b>

在上例中,正确嵌套的意思是:由于<i>元素是在<b>元素内打开的,那么它必须在<b>元素内关闭。

XML文档必须有根元素

XML文档必须有一个元素是所有其他元素的父元素。该元素称为根元素。

<root>
  <child>
    <subchild>.....</subchild>
  </child>
</root>

XML的属性值须加引号

HTML类似,XML也可拥有属性(名称/值的对)。

XML中,XML的属性值须加引号。请研究下面的两个XML文档。

第一个是错误的,第二个是正确的:

<h2><note date=08/08/2008>错误</h2><to>George</to>
<from>John</from>
</note>  
<h2><note date="08/08/2008">正确</h2><to>George</to>
<from>John</from>
</note> 

XML中的注释

XML中编写注释的语法与HTML的语法很相似:

<!--Thisisacomment-->
XML中,空格会被保留

HTML会把多个连续的空格字符裁减(合并)为一个:

HTML:HellomynameisDavid.

输出:HellomynameisDavid.

XML中,文档中的空格不会被删节。

XMLLF存储换行

Windows应用程序中,换行通常以一对字符来存储:回车符(CR)和换行符(LF)。这对字符与打字机设置新行的动作有相似之处。在Unix应用程序中,新行以LF字符存储。而Macintosh应用程序使用CR来存储新行。

XML文档包含XML元素。

什么是XML元素?
XML元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

<bookstore>
<book category="CHILDREN">
  <title>Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>
<book category="WEB">
  <title>Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
</bookstore> 

在上例中,<bookstore><book>都拥有元素内容,因为它们包含了其他元素。<author>只有文本内容,因为它仅包含文本。

在上例中,只有<book>元素拥有属性(category="CHILDREN")

XML元素是可扩展的
XML元素是可扩展,以携带更多的信息。

请看下面这个XML例子:

<note>
<to>George</to>
<from>John</from>
<body>Don't forget the meeting!</body>
</note> 

让我们设想一下,我们创建了一个应用程序,可将<to><from>以及<body>元素提取出来,并产生以下的输出:

MESSAGE

To:George

From:John

Don'tforgetthemeeting!

想象一下,之后这个XML文档作者又向这个文档添加了一些额外的信息:

<note>
<date>2008-08-08</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

那么这个应用程序会中断或崩溃吗?

不会。这个应用程序仍然可以找到XML文档中的<to><from>以及<body>元素,并产生同样的输出。

XML的优势之一,就是可以经常在不中断应用程序的情况进行扩展。
XML元素可以在开始标签中包含属性,类似HTML
属性(Attribute)提供关于元素的额外(附加)信息。

五、XML属性

HTML,你会回忆起这个:<imgsrc="computer.gif">"src"属性提供有关<img>元素的额外信息。

HTML中(以及在XML中),属性提供有关元素的额外信息:

<imgsrc="computer.gif">

<ahref="demo.asp">

属性通常提供不属于数据组成部分的信息。在下面的例子中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要:

<filetype="gif">computer.gif</file>

XML属性必须加引号

属性值必须被引号包围,不过单引号和双引号均可使用。比如一个人的性别,person标签可以这样写:

<personsex="female">

或者这样也可以:

<personsex='female'>

注释:如果属性值本身包含双引号,那么有必要使用单引号包围它,就像这个例子:

<gangstername='George"Shotgun"Ziegler'>

或者可以使用实体引用:

<gangstername="George"Shotgun"Ziegler">

XML元素vs.属性

请看这些例子:

<person sex="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person> 
 
<person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person> 

在第一个例子中,sex是一个属性。

在第二个例子中,sex则是一个子元素。两个例子均可提供相同的信息。

没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用子元素。我的经验是在HTML中,属性用起来很便利,但是在XML中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。

我最喜欢的方式

下面的三个XML文档包含完全相同的信息:

第一个例子中使用了date属性:

<note date="08/08/2008">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>  

第二个例子中使用了date元素:

<note>
<date>08/08/2008</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note> 

第三个例子中使用了扩展的date元素(这是我的最爱):

<note>
<date>
  <day>08</day>
  <month>08</month>
  <year>2008</year>
</date>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

避免XML属性?

因使用属性而引起的一些问题:

属性无法包含多重的值(元素可以)

属性无法描述树结构(元素可以)

属性不易扩展(为未来的变化)

属性难以阅读和维护

请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

不要做这样的蠢事(这不是XML应该被使用的方式):

<note day="08" month="08" year="2008"
to="George" from="John" heading="Reminder" 
body="Don't forget the meeting!">
</note> 

针对元数据的XML属性

有时候会向元素分配ID引用。这些ID索引可用于标识XML元素,它起作用的方式与HTMLID属性是一样的。这个例子向我们演示了这种情况:

<messages>
  <note id="501">
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
  </note>
  <note id="502">
    <to>John</to>
    <from>George</from>
    <heading>Re: Reminder</heading>
    <body>I will not</body>
  </note> 
</messages>

上面的ID仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。

在此我们极力向您传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

XML需要了解的内容还有很多,但是难度并不大,这里只是学习的过程中做的一点简单地总结,后续的学习过程中再做补充。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读