1 XML简介什么是XML?XML 指可扩展标记语言(EXtensible Markup Language)。XML 是一种标记语言。XML 的设计宗旨是传输数据,而不是显示数据。XML 标签没有被预定义。您需要自行定义标签。XML 被设计为具有自我描述性。XML 是 W3C 的推荐标准。XML不会做任何事情XML不会做任何事情,XML被设计用来结构化、存储以及传输信息。<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don’t forget me this weekend!</body></note>上面的这条便签具有自我描述性。它包含了发送者和接受者的信息,同时拥有标题以及消息主体。但是,这个 XML 文档仍然没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。上面实例中的标签没有在任何 XML 标准中定义过(比如 <to> 和 <from>)。这些标签是由 XML 文档的创作者发明的。这是因为 XML 语言没有预定义的标签。HTML 中使用的标签都是预定义的。HTML 文档只能使用在 HTML 标准中定义过的标签(如 <p>、<h1> 等等)。XML 允许创作者定义自己的标签和自己的文档结构。2 XML语法XML文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶"。一个XML文档实例XML文档使用简单的具有自我描述性的语法:<?xml version=“1.0” encoding=“UTF-8”?><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don’t forget me this weekend!</body></note>第一行是 XML 声明。它定义 XML 的版本(1.0)和所使用的编码(UTF-8)。下一行描述文档的根元素(像在说:“本文档是一个便签”),接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body)。语法规则XML 文档必须有根元素XML 必须包含根元素,它是所有其他元素的父元素XML 声明XML 声明文件的可选部分,如果存在需要放在文档的第一行<?xml version=“1.0” encoding=“utf-8”?>所有的 XML 元素都必须有一个关闭标签在 XML 中,省略关闭标签是非法的。所有元素都必须有关闭标签。note: 这个关闭标签的一种简写XML 标签对大小写敏感XML 标签对大小写敏感。标签 <Letter> 与标签 <letter> 是不同的。必须使用相同的大小写来编写开始标签和结束标签。XML 必须正确嵌套XML 属性值必须加引号与 HTML 类似,XML 元素也可拥有属性(名称/值的对)。在 XML 中,XML 的属性值必须加引号。错误:<note date=“12/11/2007”><to>Tove</to><from>Jani</from></note>正确<note date=“12/11/2007”><to>Tove</to><from>Jani</from></note>实体引用在 XML 中,一些字符拥有特殊的意义。如果您把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。在 XML 中,有 5 个预定义的实体引用: <<less than>>greater than&&ampersand’‘apostrophe"“quotation markXML 中的注释在 XML 中编写注释的语法与 HTML 的语法很相似。<!– This is a comment –>在 XML 中,空格会被保留XML 以 LF 存储换行3 XML元素什么是XML元素?XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。一个元素可以包含:其他元素文本属性或混合以上所有…XML元素命名规则XML 元素必须遵循以下命名规则:名称可以包含字母、数字以及其他的字符名称不能以数字或者标点符号开始名称不能以字母 xml(或者 XML、Xml 等等)开始名称不能包含空格可使用任何名称,没有保留的字词。XML元素是可扩展的XML 的优势之一,就是可以在不中断应用程序的情况下进行扩展元素。4 XML属性XML元素具有属性,类似 HTML。属性(Attribute)提供有关元素的额外信息,属性通常提供不属于数据组成部分的信息。XML属性值必须加引号,单引号、双引号都可以。<person sex=“female”>属性 VS 元素没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用元素吧。<person sex=“female”><firstname>Anna</firstname><lastname>Smith</lastname></person><person><sex>female</sex><firstname>Anna</firstname><lastname>Smith</lastname></person>属性有如下限制:属性不能包含多个值(元素可以)属性不能包含树结构(元素可以)属性不容易扩展(为未来的变化)属性难以阅读和维护。请尽量使用元素来描述数据,而仅仅使用属性来提供与数据无关的信息。针对元数据的XML属性有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 id 属性是一样的。这个实例向我们演示了这种情况:<messages><note id=“501”><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don’t forget me this weekend!</body></note><note id=“502”><to>Jani</to><from>Tove</from><heading>Re: Reminder</heading><body>I will not</body></note></messages>上面的 id 属性仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。在此我们极力向您传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。5 XML验证拥有正确语法的XML被称为"形式良好"的XML。有两种方式可以验证XML文件:XML DTD, XML Schema。XML错误会终止您的程序XML文档中的错误会终止您的 XML 应用程序。W3C的XML规范声明:如果XML文档存在错误,那么程序就不应当继续处理这个文档。理由是,XML软件应当轻巧,快速,具有良好的兼容性。XML DTDDTD(文档类型定义)的作用是定义XML文档的合法构建模块。通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。您还可以使用 DTD 来验证您自身的数据。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。内部文档声明假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:<!DOCTYPE root-element [element-declarations]>带有DTD的XML文档实例:<?xml version=“1.0”?><!DOCTYPE note [<!ELEMENT note (to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>]><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don’t forget me this weekend</body></note>以上 DTD 解释如下:!DOCTYPE note (第二行)定义此文档是 note 类型的文档。!ELEMENT note (第三行)定义 note 元素有四个元素:“to、from、heading,、body”!ELEMENT to (第四行)定义 to 元素为 “#PCDATA” 类型!ELEMENT from (第五行)定义 from 元素为 “#PCDATA” 类型!ELEMENT heading (第六行)定义 heading 元素为 “#PCDATA” 类型!ELEMENT body (第七行)定义 body 元素为 “#PCDATA” 类型外部文档声明假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:<!DOCTYPE root-element SYSTEM “filename”><?xml version=“1.0”?><!DOCTYPE note SYSTEM “note.dtd”><note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don’t forget me this weekend!</body></note>这是包含 DTD 的 “note.dtd” 文件:<!ELEMENT note (to,from,heading,body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>note: SYSTEM表示DTD文件是私有的,PUBLIC表示DTD文件是共有的。XML Schema6 XML显示在所有主流的浏览器中,均能够查看原始的 XML 文件。ML 文档将显示为代码颜色化的根以及子元素。通过点击元素左侧的加号(+)或减号( - ),可以展开或收起元素的结构。要查看原始的 XML 源(不包括 + 和 - 符号),选择"查看页面源代码"或从浏览器菜单"查看源文件”。XML 文档不会携带有关如何显示数据的信息。由于 XML 标签由 XML 文档的作者"发明",浏览器无法确定像 <table> 这样一个标签究竟描述一个 HTML 表格还是一个餐桌。在没有任何有关如何显示数据的信息的情况下,大多数的浏览器都会仅仅把 XML 文档显示为源代码。7 XML命名空间