首页 > 代码库 > Web开发技术——XML基础

Web开发技术——XML基础

什么是XML

  1. XML和HTML的区别
    1.   XML 被设计用来传输和存储数据。
    2.   HTML 被设计用来显示数据。
  2. XML 指可扩展标记语言(EXtensible Markup Language)
  3. XML 是一种标记语言,很类似 HTML
  4. 轻量级数据交换格式

XML的用途

  1. XML 把数据从 HTML 分离
  2. XML 简化数据共享
  3. XML 简化数据传输
  4. XML 简化平台的变更
  5. XML 使您的数据更有用
  6. XML 用于创建新的 Internet 语言
    1. XHTML - 最新的 HTML 版本
    2. WSDL - 用于描述可用的 web service
    3. WAP 和 WML - 用于手持设备的标记语言
    4. RSS - 用于 RSS feed 的语言
    5. RDF 和 OWL - 用于描述资源和本体
    6. SMIL - 用于描述针针对 web 的多媒体

 

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 文档实例二

clip_image001

上图表示下面的 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语法

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

XML 标签对大小写敏感

XML 必须正确地嵌套

XML 文档必须有根元素

XML 的属性值须加引号

实体引用

在 XML 中,一些字符拥有特殊的意义。
如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。
这样会产生 XML 错误:
<message>if salary < 1000 then</message>
为了避免这个错误,请用实体引用来代替 "<" 字符:
<message>if salary &lt; 1000 then</message>
在 XML 中,有 5 个预定义的实体引用:
&lt;    <    小于
&gt;    >    大于
&amp;    &    和号
&apos;    ‘    单引号
&quot;    "    引号

注释:在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。

XML 中的注释

<!-- 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 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

<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 元素可以在开始标签中包含属性,类似 HTML。

属性 (Attribute) 提供关于元素的额外(附加)信息。

XML 属性

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

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

<img src="http://www.mamicode.com/computer.gif">

<a href="http://www.mamicode.com/demo.asp">

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

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

XML 属性必须加引号

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

<person sex="female">

或者这样也可以:

<person sex=‘female‘>

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

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

或者可以使用实体引用:

<gangster name="George &quot;Shotgun&quot; 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>

Web开发技术——XML基础