XML学习笔记

来源:互联网 发布:淘宝不能申请退款 编辑:程序博客网 时间:2024/06/05 09:41

可扩展标记语言 xml (eXtensible Markup Language)

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

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>

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

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

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

</note>

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

说明:

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> 元素有 个子元素:<title>< author><year><price> 

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

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

<p>This is a paragraph

<p>This is another paragraph

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

<p>This is a paragraph</p>

<p>This is another paragraph</p>  

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

XML 标签对大小写敏感

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

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

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

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

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

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

XML 必须正确地嵌套

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

<b><i>This text is bold and italic</b></i>

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

<b><i>This text is bold and italic</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 的语法很相似:

<!-- This is a comment -->
在 XML 中,空格会被保留

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

HTML: Hello           my name is David.

输出: Hello my name is David.

 

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

XML 以 LF 存储换行

在 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't forget the meeting!

想象一下,之后这个 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,你会回忆起这个:<img src="computer.gif">"src" 属性提供有关 <img> 元素的额外信息。

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

<img src="computer.gif">

<a href="demo.asp"> 

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

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

XML 属性必须加引号

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

<person sex="female">

或者这样也可以:

<person sex='female'>

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

<gangster name='George "Shotgun" Ziegler'>

或者可以使用实体引用:

<gangster name="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 元素,它起作用的方式与 HTML 中 ID 属性是一样的。这个例子向我们演示了这种情况:

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

 

0 0