XML - 可扩展标记语言 (Extensible Markup Language)

本文详细介绍了XML(可扩展标记语言)的基本概念、语法规则以及使用方法。包括XML的定义、XML文档的编写、XML元素、属性、标记的使用、XML树状结构、元素之间的关系、XML元素属性的使用、XML名称命名规则、XML文档的注释、XML声明、版本、字符编码、独立性等核心内容。此外,还提供了XML文档的实例,并阐述了XML的优势和使用场景。

XML 可扩展标记语言 (Extensible Markup Language)

XML 是英文 Extensible Markup Language 的缩写,它的中文意思是 "可扩展标记语言"

编写和浏览一个 XML 文档

XML 文档以 .xml 为后缀。

编写一个 XML 文档,不需要特别的软件,只需要一个文本编辑器就可以,比如记事本程序 (Notepad)

你可以打开 Notepad,然后将下面这段代码拷贝下来,然后存成以 .xml 为后缀的文件,比如 book.xml,然后存盘,这样就生成了一个 XML 文档。

<?xml version="1.0" encoding="UTF-8"?>
<books ISBN ="9787544238212">
  <title>The Book Thief</title>
  <price>25</price>
  <quantity>10</quantity>
</books>

你可以使用文本编辑器( Notepad EditPlus),浏览器 (IE 或者 Firefox),或者 XML专用工具 (XMLSpy) 打开并浏览 XML 文件。

我们可以通过这个 XML 文档的例子对 XML 有个初步的认识。

XML 文档的第一行是 XML 声明,定义了 XML 的版本和使用的字符编码。在这个例子中,XML 遵守的版本是 1.0,使用的字符编码是 UTF-8 字符集。

XML 文档有一个根元素 (root element) 叫做 booksbooks 根元素下又有 3 个元素,分别是 title, price, quantity

每个 XML 元素都以一个起始标记 (opening tag) 开始 ,以一个结束标记 (closing tag) 收尾。

比如 <title> 就是一个起始标记,</title> 就是一个结束标记。

起始标记以 < 开始,以 > 结束。结束标记以 </ 开始,以 > 结束。

XML 元素可以带有属性,属性值要加引号。比如 ISBN 就是 books 的属性,属性值为 9787544238212

XML 的标记 (tag) 是可以自定义的,用来描述数据。比如该例子中的 title 元素,

<title>The Book Thief</title>

title 标记表示这个元素内的数据是书名,The Book Thief 就是一个具体书名。

你可以修改标记,比如写成

<booktitle>The Book Thief</booktitle>

由于 XML 的标记可以随意定义,我们可以用 XML 描述和存储各种内容的数据。这里举的只是一个有关书的 XML 文档例子,你还可以创建其它 XML 文档,比如有关电影的,或者家具的,等等。也就是说,各种内容的数据,都可以通过 XML 描述和存储起来。

XML 文档是一棵节点树。一个XML 文档只有一个根节点。在该例子中,books 就是根节点,books 下面有子节点 title, price, quantity

什么是 XML?

根据上面的例子,我们对 XML 有个大致的了解。总的来说,有以下几个要点:

·                                 XML 是一种可扩展的标记语言 (Extensible Markup Language)

·                                 XML 的标记 (tag) 没有被预定义,用户可以自行定义标记来描述数据。

·                                 XML 主要用来描述和存储数据。

·                                 XML 具有自我描述性。

·                                 XML 是树状结构的文档,是个结构化的文档。

·                                 XML 文档是个文本文件。

使用 XML 的好处

·                                 易携带和传输
XML
文档不依赖于特殊的软件,只要有个文本编辑器,就可以编写 XML 文档,而且是存成文本格式。一个 XML 文档就是一个小小的文本文件,易于携带和传输。

·                                 易于共享和跨平台
XML
本身是个文本文件,而且是有结构化的数据,很容易被各系统读取。

·                                 易于查询
因为 XML 是树状结构,易于查询。

编写 XML 必须遵循一些简单的语法规则,主要列示如下:

·                                 每个开始标记 (opening tag) 必须有结束标记 (closing tag)

·                                 一个 XML 文档只能有一个根元素 (root element)

·                                 所有 XML 元素必须正确嵌套

·                                 属性值必须加引号

·                                 一个元素不能有相同的属性 (attribute)

XML 标记 (tag),元素 (element) 和属性 (attribute)

在解释上面的语法规则之前,我们先解释一些 XML 最常用的术语:

·                                 标记 (开始标记 opening tag,结束标记 closing tag)

·                                 元素 (element)

·                                 属性 (attribute)

<books ISBN ="9787544238212">

        <title>The book thief</title>

        <price>25</price>

        <quantity>10</quantity>

</books>

上面是一个简单的 XML 文档,我们看到有很多这样的相同特征的字符串,<title><price><quantity></books> 等等。

它们都是由小于号 < 开始,由大于号 > 结束,在 XML 文档里,我们将其称为 XML 标记 (tag)

标记又有开始标记结束标记之分。

开始标记由 < 开始,由 > 结束。比如<title><price><quantity>

结束标记由 </ 开始,由 > 结束。比如</title></price></quantity>

XML 元素 (element) 指的是从一个开始标记到它的结束标记的一段内容。

比如 <title>The book thief</title> 就是一个元素。

元素是 XML 文档的基本单位,一个 XML 文档可以由一个或者多个元素构成

一个元素可以带有属性 (attribute),属性写在开始标记里,写在元素名称的后面。比如

<books ISBN ="9787544238212">

其中 ISBN ="9787544238212" 就是 books 元素的一个属性, ISBN 是属性的名称,9787544238212 是属性值,属性值必须加引号

XML 的语法规则

接下来,我们逐个解释 XML 文档的语法规则。

每个开始标记 (opening tag) 必须有结束标记 (closing tag)

比如上面的例子中, 开始标记 <price> 必须有相应的结束标记 </price>

一个 XML 文档只能有一个根元素 (root element)

XML 文档是树状结构的,象一棵节点树。比如上面例子中,books 就是根元素,而 titlepricequantity 则是 books 的子节点。

如果写成下面这样,一个文档有两个 books 根元素,就出错了。

<?xml version="1.0" encoding="UTF-8"?>

<books ISBN ="9787544238212">

        <title>偷书贼</title>

        <price>25</price>

        <quantity>10</quantity>

</books>

<books ISBN ="978758225">

        <title>香水</title>

        <price>100</price>

        <quantity>12</quantity>

</books>

所有 XML 元素必须正确嵌套

正确的嵌套:

<books><title>香水</title></books>

错误的嵌套:

<books><title>香水</books></title>

属性值必须加引号

一个 XML 元素可以带有属性 (attribute),属性写在开始标记里,写在元素名称的后面。比如

<books ISBN ="9787544238212">

其中 ISBN ="9787544238212" 就是 books 元素的一个属性, ISBN 是属性的名称,9787544238212 是属性值,属性值必须加引号。

一个元素不能有相同的属性 (attribute)

下面的写法是错误的,因为一个 XML 元素不能有两个相同的属性名称,虽然属性值不同。

<books ISBN ="9787544238212" ISBN ="97875442dr">

不过,如果你将 ISBN 小写,写成如下,就是对的。

因为 XML 文档是区分大小写的 (case sensitve)ISBN isbn 表示两个不同的属性。

<books ISBN ="9787544238212" isbn ="97875442dr">

XML 元素是 XML 文档的基本单位。一个 XML 文档由一个或者多个 XML 元素构成。

比如 <site>woyouxian.net</site> 就是一个 XML 元素,也可以是一个最简单的 XML 文档。

一个 XML 元素从一个起始标记开始,到对应的结束标记结束。在起始标记和结束标记之间的内容,我们称为 XML 元素的内容 (element's content)。比如,woyouxian.net 就是元素 <site>woyouxian.net</site> 的内容。

空元素 (empty element)

如果一个 XML 元素没有内容,比如,<site></site> 我们称其为空元素 (empty element)

空元素有一种特殊的写法,以 < 开始,然后是元素名称,然后以 /> 结束。比如,<site />

大小写敏感 (case sensitive)

XML 文档是区分大小写的。比如<SITE> <site> 就表示两个不同的元素。这一点在编写 XML 文档时要非常非常注意。

XML 树状结构

XML 文档是树状结构的。它只有一个根元素 (root element),其它元素都是根元素的后代。

<?xml version="1.0" encoding="UTF-8"?>
<father>Tom Smith
   <son>John Smith
       <grandson>Hans Smith</grandson>
   </son>
   <daughter>Jane Smith</daughter>
</father>

比如,我们看上面的例子,根元素是 fatherfather 下面有 2 个子节点,即 son daughter 元素,而 son 元素下面又有一个子节点,就是 grandson 元素。

XML 文档的数据,就是象这样,通过树状结构构成的。

XML 元素之间的关系

XML 元素之间的关系,主要有:

·                                 child

·                                 parent

·                                 sibling 兄弟姐妹

以上面的例子来解释这些关系。

son 元素就是 father 元素的 child

father 元素就是 son 元素和 daughter parent

daughter son 元素的关系是 sibling 的关系。

XML 可以带有属性 (attribute),作为 XML 元素 (element) 的附加信息。

比如 <book ISBN ="9787544238212"> 就是一个带有属性的 XML 元素。ISBN 是属性名称 (name)9787544238212 是属性的值 (value)

XML 属性是以名称和值 (name-value) 的形式配对出现的。

XML 属性应写在开始标记里面,在开始标记的名称之后。

XML 属性名称是区分大小写的,比如 Name name 就表示两个不同的属性。

XML 属性的值应用引号围起来,你可以用双引号,也可以用单引号,以下的写法都是正确的。不过通常来说,XML 属性采用双引号。

<book ISBN ="9787544238212">

<book ISBN ='9787544238212'>

如果属性的值里包含双引号,就用单引号包围属性值,比如:

<site info ='wo"you"xian.net'>

如果属性值里包含单引号,就用双引号包含属性值。

<site info ="wo'you'xian.net">

一个 XML 元素可以有一个或者多个属性。每个属性都以空格分开。比如:

<site name="woyouxian.net" author="me">

使用 XML 元素还是属性

没有硬性规定说那些数据应该使用元素,哪些数据应该使用属性,比如以下这两种写法都是对的。

第一种写法,使用属性:

<site name="woyouxian.net">

第二种写法,使用元素:

<site>

        <name>woyouxian.net</name>

</site>

通常来说,元数据 (metadata) 应使用属性,而数据本身应当使用元素。

还有,通常 ID 索引,大都使用属性。比如:

<employee ID="6699">

元数据

在计算机语言里,你经常可以看到一个前缀 -- metameta 就是"关于" (about) 的意思。

元数据,metadata,意为描述数据的数据,英文即 data about data

比如一篇文章,文章关键词就是元数据,而文章的内容就是数据本身。示例如下:

<article keywords="XML,属性" >

        <content>XML 可以带有属性 ,作为 XML 元素的附加信息。XML 属性是以名称和值的形式配对出现的。XML 属性应写在开始标记里面,在开始标记的名称之后。</content>

</article>

XML 名称命名规则

XML 名称可以包含英文字母,和数字,或者其它字符(比如下划线)

XML 名称不能以数字或者标点符号开头

XML 不能以 xml 开头 (或者 xml 形式的大小写,因为这是 XML 相关标准的保留词)

XML 名称不能包含空格

 

虽然 XML 名称可以包含非英语的字符,比如 as ö, ç 等,但是考虑到读取 XML 文档的软件未必支持多语言,为求兼容性,建议还是使用英文字母比较安全。

虽然 XML 支持下划线 (_),连字符 (-),句号(.) 和冒号(:),但 XML 开头不能用连字符 (-) 和句号(.) 冒号(:) ,这是 XML Namespace 用到的保留符号,这在以后章节会详述。所以保险起见,你只用下划线 (_) 就行了,其它的标点符号都不用。

正确的 XML 名称示例:

<name>

<first_name>

<one_4_all>

错误的 XML 名称示例:

<mom's pie>

<mon/day/year>

<4-u>

<first name>

XML 文档里,除了表示一个标记的开始之外,不允许有小于号 <,因为小于号 < 总是被XML 解析器解释为一个标记的开始。

<person>if age < 10 </person>

上面的写法会导致 XML 文档的错误。

为避免这样的错误,而你又需要在 XML 文档内容里使用小于号,你可以使用小于号的实体引用 (entity reference) ,即 &lt; 来替换小于号。下面是正确的写法:

<person>if age &lt; 10 </person>

XML 里也不能用 & 这个字符,因为 & 被解析为某个实体引用的开始。所以,你必须使用& 的实体引用 &amp; 来替代 & 。比如,

<company>John & Hans</company>

应该写成

<company>John &amp; Hans</company>

XML 5 个预定的实体引用 (entity references)。它们分别是:

实体引用

字符

说明

&lt;

小于号

&gt:

大于号

&amp;

&

&apos;

'

单引号

&quot;

"

双引号

XML 解析器解析含有上述实体引用的 XML 文档时,会将这些实体引用转换成相应的字符。

只有 < & 字符在 XML 是非法的。另外几个是合法的。但是 > 容易被看成一个标记的结束符号,而' " 这两个符号,又经常作为 XML 属性的开始符号和结束符号,所以为了避免 XML 书写的错误,建议将这三个符号也用其实体引用来表示。

为了避免 XML 解析错误,我们应该使用 &lt; 来替代 <,使用 &amp; 替代 &

但是假设你需要在 XML 文档里写一段内容,里面包含了很多 < 或者 &,要将所有 < 或者 & 转换成实体引用是很讨厌的事情。

这时候,你可以使用 CDATA (CDATA section)。在 CDATA 区里,你可以不必使用实体引用,因为 XML 解析器不会解析 CDATA 区内的内容。

CDATA (CDATA section) <![CDATA[ 开始,以 ]]> 结束。 示例如下:

<mycode> This is a html page

<![CDATA[

        <html>

        <head>

        <title>woyouxian</title>

        </head>

        <body>

        I like woyouxian.net

        </body>

        </html>

        ]]>
</mycode>

注意:在 CDATA 区内,不能出现 ]]>

你可以在 XML 文档里写注释,以帮助他人或者自己日后理解。

XML 的注释以 <!-- 开始,以 --> 结束。示例如下:

<!-- This is a comment. -->

注意:在 XML 注释里面,除了结束符 -->,当中不能有连续两个连字符 --

在结束 XML 注释时,---> 也是非法的。

XML 的注释可以放在 XML 的元素内容里,但是不能放在标记里。

XML 文档应当以 XML 声明 (declaration) 开始,不过不是必须的。

下面就是一个简单的 XML 文档示例,第一行就是 XML 声明。

如果一个 XML 文档含有声明,必须放在 XML 文档的第一行。

XML 文档声明主要有三个参数:

·                                 版本 version)

·                                 字符编码 (encoding)

·                                 独立 (standalone)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<site>

   woyouxian.net

</site>

版本(version)

版本表示遵循的是 W3C XML 1.0 的标准。

字符编码 (encoding)

字符编码表示该 XML 文档使用的字符编码。

一些英文的 XML 文档,你会看到它们使用的是单字节的 ISO-8859-1 编码。不过对于中文文档来说,应该使用支持双字节 UTF-8 或者 Unicode

如果是含有非英语字符的 XML 文档,你需要将 XML 文档存成 UTF-8 或者 Unicode 格式。

独立 (standalone)

如果 XML standalone 的值是 no ,表示它需要 DTD (DTD 放在以后再说)

不需要 DTD XML 文档, standalone 值应该写 yes

格式正确 (Well-Formed) XML 文档必须遵循以下规则:

·                                 每个开始标记必须有结束标记。

·                                 XML 文档只有一个根元素。

·                                 XML 元素必须正确嵌套。

·                                 XML 元素不能有相同名称的属性。

·                                 XML 属性值必须加引号。

·                                 XML 注释不能写在标记里。

·                                 XML 文档里不能出现 < & 标记,必须用实体引用 &lt; 替代 < &amp; 替代 &

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值