XML入门

1 XML简介

什么是XML?

  • XML 指可扩展标记语言(EXtensible Markup Language)。
  • XML 是一种标记语言。
  • XML 的设计宗旨是传输数据,而不是显示数据。
  • XML 标签没有被预约义。您须要自行定义标签。
  • XML 被设计为具备自我描述性。
  • XML 是 W3C 的推荐标准。

XML不会作任何事情

XML不会作任何事情,XML被设计用来结构化、存储以及传输信息。html

<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 语言没有预约义的标签。less

HTML 中使用的标签都是预约义的。HTML 文档只能使用在 HTML 标准中定义过的标签(如 <p>、<h1> 等等)。XML 容许创做者定义本身的标签和本身的文档结构。post

2 XML语法

XML文档造成了一种树结构,它从"根部"开始,而后扩展到"枝叶"。this

一个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)。spa

下一行描述文档的根元素(像在说:"本文档是一个便签"),接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body)。设计

语法规则

XML 文档必须有根元素

XML 必须包含根元素,它是全部其余元素的父元素code

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 个预约义的实体引用:

& lt; < less than
& gt; > greater than
& amp; & ampersand
& apos; ' apostrophe
& quot; " quotation mark

XML 中的注释

在 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 DTD

DTD(文档类型定义)的做用是定义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 Schema

6 XML显示

在全部主流的浏览器中,均可以查看原始的 XML 文件。

ML 文档将显示为代码颜色化的根以及子元素。经过点击元素左侧的加号(+)或减号( - ),能够展开或收起元素的结构。要查看原始的 XML 源(不包括 + 和 - 符号),选择"查看页面源代码"或从浏览器菜单"查看源文件"。

XML 文档不会携带有关如何显示数据的信息。

因为 XML 标签由 XML 文档的做者"发明",浏览器没法肯定像 <table> 这样一个标签究竟描述一个 HTML 表格仍是一个餐桌。在没有任何有关如何显示数据的信息的状况下,大多数的浏览器都会仅仅把 XML 文档显示为源代码。

7 XML命名空间

XML 命名空间提供避免元素命名冲突的方法。

使用前缀来避免命名冲突

在 XML 中的命名冲突能够经过使用名称前缀从而容易地避免。

该 XML 携带某个 HTML 表格和某件家具的信息:

<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>

<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>

在上面的实例中,不会有冲突,由于两个 <table> 元素有不一样的名称。

xmlns属性

当在 XML中使用前缀时,前缀的命名空间必须被定义。

命名空间是在元素的开始标签的 xmlns 属性中定义的。

命名空间声明的语法以下。xmlns:前缀="URI"。命名空间,能够在他们被使用的元素中或者在 XML 根元素中声明:

<root>

<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>

<f:table xmlns:f="http://www.w3cschool.cc/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>

</root>

当命名空间被定义在元素的开始标签中时,全部带有相同前缀的子元素都会与同一个命名空间相关联。

命名空间,能够在他们被使用的元素中或者在 XML 根元素中声明:
<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3cschool.cc/furniture">

<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>

<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>

</root>

命名空间 URI 不会被解析器用于查找信息,其目的是赋予命名空间一个唯一的名称

默认的命名空间

为元素定义默认的命名空间可让咱们省去在全部的子元素中使用前缀的工做。它的语法以下:

xmlns="namespaceURI"
这个 XML 携带 HTML 表格的信息:

<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
这个XML携带有关一件家具的信息:

<table xmlns="http://www.w3schools.com/furniture">
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
相关文章
相关标签/搜索