XML2

更新时间:2024-05-26 21:09:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第 17 天 XML,DTD,Schema

工欲善其事,必先利其器。

XML,可扩展标记语言(eXtensible Markup Language),是 W3C(万维网联盟)认可的文档标记标准。它定义了利用简单的、人类可读的标签对数据进行标记所采用的语法。提供了计算机文档的一种标准格式。

XML 是用来描述数据的一种格式,这种格式使用简单的,易读的文本进行描述,可以用来描述无穷无尽的类型的数据。

XML 仅仅是一种标记语言,这一点非常重要。首先,XML 不是编程语言,虽然可以使用 XML 的格式来写各种程序,它仅仅是一种描述数据的格式。其次,XML 不是网络传输协议。但是,可以通过 FTP,HTTP 等等协议来传输以 XML 格式描述的数据。最后,XML 不是数据库,由于可以通过 XML 来描述数据,所以这一点常常会造成混淆。我们通常所说的数据库包括数据管理软件和所管理的数据,记住,XML 仅仅是描述数据的格式。 那么,XML 仅仅那么简单么? 水是不是也非常简单?

XML 的简单历程

20世纪70年代,IBM 公司的 Charles Goldfarb、Ed Mosher和Ray Lorie 开发了最终称为 SGML 的语言 ( Standard Generalized Markup Language,标准通用标记语言)。这种语言经过全世界数百人的开发,直到 1986年被 ISO 采用为 8879 标准。

SGML 最重要的成功是 HTML,然而,HTML 仅仅是 SGML 的一种应用,HTML 对于创建网页很成功,但是其作用仅限于此。

SGML 的主要问题是太复杂。一份正式的 SGML 规范长达 150 多页。

1998年2月,通过对于 SGML 的“精简”,诞生了 XML 1.0 ,并且很快取得了成功。

XML 的结构

可以从三个角度看 XML ? 通过文本描述 ? 明确的编码 ? 层次的标记语言

通过文本描述

XML 的内容通过文本表示出来,而不是使用二进制的方式进行描述。这使得 XML 非常便于书写、传递、阅读。

明确的编码

由于在计算机中处理的所有内容都是数字,包括文本,那么,这些数字是如何被解释为文本的呢?答案是通过某种字符编码格式。XML 文件的本文是通过明确的标码格式进行定义的,因此,可以保证被正确的解读出来。

通常情况下,在 XML 文件的第一行,使用 进行定义。其中 version 表示所使用的 XML 的版本,encoding 用来声明本 XML 文件所使用的字符编码格式。由于目前 XML 只有 1.0 版本,所以,默认情况下,版本就是 1.0,encoding 属性默认值为 UTF-8,所以,也有许多 XML 文件没有特别指定 encoding ,表示使用的是 UTF-8 编码。还有一些 XML 文件没有在第一行给出定义,则表示使用默认的定义,即 version 为 1.0,ecnoding 为 UTF-8。

层次的标记语言

XML 使用层次的标记语言来表述数据信息。

层次化的标记语言可以非常方便地描述层次化的数据,标记语言可以对数据进行说明。

XML 文档是一颗树。

XML 文件的一些特点: 区分大小写

属性必须使用引号引起来,在 XML 中使用单引号和使用双引号引起来的内容都是字符内容,没有区别。

下面看一个 XML 文件

XML 彻底研究 张三

共有七种组成元素可以出现在 XML 文件中

1. 第一行出现的称为 XML 的定义,用来说明本 XML 文件的版本和编码信息。当前所

有的 XML 版本都是 1.0 。encoding 用来指定 XML 文档的编码格式。

2. 最重要的是元素,元素是整个XML文件的主要架构。元素是通过标记进行定义的,整

个元素由三部分组成,元素的开始标记,元素的结束标记,其他包含在元素开始标记和结束标记之间的内容。我们通常使用标记的名称来做为元素的名称。没有包含内容的元素称为空元素。空元素可以简写为 <元素名称/>。

例如:张三

author 为元素的标记名,同时也是标记的名称,张三为元素的内容。

没有名字的作者可以如下表示:

3. 属性:写在元素的开始标记中的名值对,称为属性,名值之间通过等号 (=) 进行分隔,

等号前面为属性的名称,等号后面为属性的值。属性的值必须使用引号引起来,在 XML 中不区分单引号和双引号的作用,但必须同时使用单引号或者双引号,不能交叉使用。

如:

code 为元素 book 的属性,code 属性的值为 F1234 同一个元素的开始标记中可以有多个属性,多个属性之间通过空白分开,但是,不能有同名的属性。

4. 文本内容,在 XML 中,在元素标记之间的内容称为文本内容,文本内容只有值,没

有名称,用来表示元素的值。

例如:张三

张三为元素 author 元素的文本内容。 在 XML 中可以使用字符引用来通过字符编码表示字符。 字符引用如果使用十进制的数字表示,格式为 &#十进制数字; 例如 њ。

字符引用如果使用十六进制的数字表示,格式为 &#x十六进制数字;,注意多了一个x

5. 实体参考,由于在 XML 使用了一些特殊的符号,总共有 5 种符号: < ,>,” , ?,

&,因此在书写 XML 的时候使用这些符号会导致其含义被误解,为了能够在 XML 的内容中使用这 5 种符号,XML 预定义 5 种实体来代表这 5 种符号。 lt < gt > amp & quot “ apos ?

但是,直接写这些符号也会导致混乱,所以在使用这些符号的时候,必须在实体的前面加上 &,后面加上分号 ( ; ) 来特别表示。因此在使用中出现的形式为:

< < > > & & " “ ' ?

6. 注释:XML 的注释和 HTML 的注释一样,使用

例如:

7. CDATA CDATA 就是 Character Data 的意思,也就是不需要用 XML 解析器处理的

内容,例如在 XML 文件中程序代码等,要按照规定格式使用 例如:

具体内容 ]]>

8. PI 处理指令

用来在 XML 文件中包含应用程序命令,格式为

例如:

其中 xml-stylesheet 为处理指令的名称,type=?text/xsl? href=?book.xslt? 为处理指令的值。

在 XML 中,最重要的内容为元素,属性和文本内容。

DTD

虽然根据 XML 的基本规则就可以写出 XML 文档,但是,如果大家都自由随意地书写 XML,那么,这些数据还是很难以进行交流的。

为了规范 XML 的结构,先后制定了两种定义 XML 结构的规范: ? DTD

? XML Schema

在 XML 创建的早期,为了解决 XML 结构定义的问题,直接采用了 SGML 中的定义部分,这个技术称为 DTD( document type definition)。

DTD 用于定义 XML 文件的结构,既可以在 XML 文件内部定义 XML 文件的架构,也可以在一个专用的文件内定义 DTD ,然后用于检查 XML 是否符合定义的架构。

在 XML 文件内定义的形式如下:

在 XML 文件外部的专用文件内定义 DTD时,XML 文档内必须包含 DTD 的引用,此引用在文档的唯一文档类型声明中给出。使用这种方式时,需要在 XML 的定义中进行声明,例如:

不过,即使在不需要的情况下,将 standalone 设置为 no 也没有关系,此设置可选,默认为 no。

文档类型定义有两种写法:

此声明指出文档的根元素为 person ,并且该文档的定义 DTD 可以在 “http://abc.com/xml/person.dtd” 找到。

另外一种写法更常在网页上看到,例如,在网页的开始,常常有如下的定义:

此声明表示文档的根元素为 html,使用 W3C 的名为 -//W3C//DTD XHTML 1.0 Strict//EN 的网页标准,此标准可以在 http://www.w3.org/TR/xhtml/DTD/xhtml1-strict.dtd 找到。

PUBLIC 表示使用公用标准,后面紧跟着的为标准的 ID。这个 ID 唯一的标识了这个公用标准,一般来说,使用这个标准的程序往往备份了这个标准,这样,即使在不能联网的情况下,也可以使用这个标准。

定义不包含内容的元素

不包含内容的元素称为 EMPTY

下面的例子使用包含在 XML 文件内的 定义方式进行定义

]>

用来指定 dtd 的定义,book 表示 XML 文件的根元素是 book, 在其中间的就是对文件的详细定义了。

定义包含文本内容的元素

以下为简单的 XML 文件

轻松学习 XML

可以如下定义

]>

轻松学习 XML

每一个元素如下定义

!ELEMENT 表示要定义元素,后面的圆括号中是元素的定义内容,#PCDATA 表示已经进行解析的文本内容,而且不包含任何类型的子元素

定义包含有子元素的元素

轻松学习 XML

]>

轻松学习 XML

增加了如下一行

元素名称后面的圆括号内用来表示元素的内容。此时表示 booklist 元素有一个 book 子元素。

然后依次定义子元素的类型,定义同前。

多个子元素的定义

]>

1234 轻松学习 XML

多个子元素时,在元素的定义中,依次定义子元素,子元素之间用逗号 ( , ) 分隔。逗号表示子元素出现的先后顺序。在 XML 文件中子元素的使用顺序必须同定义的顺序

如何控制子元素出现的次数

可以在子元素的后面增加控制符号 ? 表示出现 0 次或 1次 * 表示出现 0 次或多次 + 表示出现 1 次或多次

没有控制符号表示必须出现 1 次

| 表示子元素可选

数据类型的定义

前面我们一直使用 #PCDATA 来定义元素的数据内容,其他还有:

EMPTY 表示 空元素,没有数据内容 #PCDATA 表示文本数据的字符串 ANY 表示元素内容可以属于任何数据

在 DTD 中,没有整数,小数,日期,字符串的概念。

属性的定义

定义属性使用如下语法

属性类型有如下十种

CDATA 文本数据字符串 ID 表示唯一的一个号码,而且在整个 XML 文件中不可重复,必须以字母开头 IDREF 表示使用其他元素属性的 ID 值 IDREFS 表示使用多个其他元素的ID值, 多个ID值时,使用空格进行分隔. ENTITY 表示使用预定义好的实体,实体就是定义好名字的一个内容 ENTITYS 表示使用预定义好的一组实体,实体就是定义好名字的一个内容,使用空格分隔

NMTOKEN 关键字的名称,包括字母,数字,和 _ . - :

NMTOKENS 关键字的名称,包括字母,数字,和 _ . - : 使用空格进行分隔 NOTATION 参考的标记声明

(value | value) 选择一个或多个 NMTOKEN 的值

还有一个 xml: DTD 默认的属性

DTD 的默认属性有两个:

xml:space 取值可以是 default 和 presever, 控制空格的处理 xml:lang 指定元素所使用的语言 大陆:zh-CN 台湾:zh-TW

由于可能在 XML 文件中使用多种编码,所以可以在元素的标记中通过 xml:lang 指定此元素所使用的语言,语言通常使用一个两个字符的代码进行表示,这些代码定义在 ISO 639 中。

但是,一些时候,仅仅知道所采用的语言还不够,例如,中文在中国大陆和中国台湾有不同的用法,所以我们还需要知道在哪个地区讲该语言。为了处理这些差别,语言代码后可以跟随任何子代码编号,以进一步指定所采用的语言。如果语言代码为一个 ISO 639代码,则子代码应该是一个两个字母的国家代码,定义在 ISO 3166 中。

语言代码通常小写,国家代码通常采用大写。然而,这只是一种习惯,并非规定。

可以定义同时定义多个属性

属性可以有可选的选项,对属性进行说明

#IMPLIED 表示可选的属性 #REQUIRED 表示必须的属性 #FIXED 固定的属性,用户不可更改

例如,下面的例子中 book 元素有一个 no 的属性,此属性为必写属性。

]>

1234 轻松学习 XML

后面的内容不经常使用,为选读内容。

实体

实体就是语言中的常数,主要用来定义一些重复和常用的文字内容 例如:将公司名称定义为实体

使用时:

&corp;

通过在实体前加上 &, 后面加上; 来使用

如果实体是在外面文件中定义的话

如果不是文本内容,是二进制的文件,需要说明二进制文件的类别

参数实体用在 DTD 文件中,将常用的内容定义,以便以后使用 通过在实体名称前增加 % 来定义

使用时实体变量时,在变量的前面加上 %, 后面加上 ;

DTD 的标记

用来声明外部的非 XML 数据,以便应用程序知道如何进行处理

单独文件的 DTD

DTD 的定义内容也可以保存在单独的文件中,称为 DTD 文件,一般这类文件的扩展名为 DTD。

例如,上面的例子也可以保存为两个文件

DTD 文件 booklist.dtd

XML 文件 booklist.xml

1234 轻松学习 XML

SYSTEM 后面为 DTD 文件的绝对或者相对路径。

公共的 DTD

有一些公共定义的 DTD 可以直接使用,例如,在 xml 诞生之后,W3C 定义了基于 XML的 xHTML 规范,对 HTML 的书写进行了更为严格的限制,这个限制有两个规范组成。

Strict 为严格的规范 Transitional 为过渡规范

这两个规范都采用 DTD 进行定义。 在使用中,在需要进行检查的网页前声明 DTD 的定义,在 ASP.NET 中,每一个 .ASXP 文件的开头部分都为

上面的声明中,PUBLIC 表示公共定义,后面的 -//W3C//DTD XHTML 1.0 Transitional//EN 为定义的名称。最后一部分为定义的网址。

对于 IE 浏览器,当网页中包含这个定义的时候,工作在标准模式,浏览器的行为会尽可能靠近 W3C 的规范。没有这个定义的时候,工作在怪异模式。也就是 IE 的默认工作方式中。可能与 W3C 的定义不一致。所以我们的网页一定要在开头加上这个定义。

Xml Schema

Xml Schema 为 W3C 专门为 XML 定义的 XML 架构定义语言,提供了比 DTD 更为强大的定义能力。新的 XML 架构定义都已经采用了 Xml Schema 为定义语言。

如何写一个最简单的XML Schema文档呢?

定义简单的 Schema

hello.xml

-------------------

Hello World!!

(一个根元素:greeting;且这个元素不含属性,无子元素,内容是字符串。)

hello.xsd

----------

XML Schema文档后缀名是.xsd,完全符合XML语法,根元素是schema,命名空间xmlns:xsd=\,用元素定义实例文档中的元素,如greeting。

XML 的命名空间

Xmlns 为 Xml namespace 的简写,即 XML 命名空间。在 XML 中为了保证命名空间的唯一性,使用基于域名的命名空间命名方式。上面的 http://www.w3.org/2001/XMLSchema 即为命名空间的名称,虽然非常类似于网址,但是实际上在此处表示命名空间的名称。

由于命名空间比较长,所以在 XMLSchema 中经常使用命名空间的简写,xmlns:xsd 中的 xsd 就是这个命名空间的简写形式。

简单类型和复杂类型

在 XMLSchema 中,定义的核心概念就是简单类型和复杂类型 简单类型就是既不包含子元素,也不包含属性的类型。 复杂类型是可能包含子元素,或者可能包含属性的类型

假设实例文档是如下的:

customer.xml -----------

teiki

No.237, Road Waitan, Shanghai

由于 customer 包含子元素 name 和 address,所以为复杂类型。

name 和 address 既没有包含子元素,又没有包含属性,所以为简单类型。

复杂类型必须使用 complexType 进行说明。并声明其中包含的子元素或者属性。

则可以写出以下的XML Schema文档: customer.xsd ----------------

1:

2: 5:

6: 9: 10: 11:

实例文档customer.xml中,元素含有两个子元素,所以我们在Schema文档中采用ComplexType来定义该元素。

sequence表示子元素依次出现的顺序。

type 属性用来声明简单元素的类型,在 XMLSchema 中,预定义了多种基本的数据类型,例如:字符串类型xs:string,整数类型xs:integer,布尔类型 xs:Boolean等等。在 XML中没有字符类型。

如果包含更复杂的子类型,则反复使用上面的原则。

这次我们给出一个更加复杂一些的文档:

address.xml ---------------

Teiki

Zhejiang Hangzhou

Xilu Road, No.121, 7F

为此,我们需要一个更加复杂一点的Schema文档:

address.xsd -----------------

1:

2:

4: 6:

7: 20: 21: 22:

23:

通过 ref 简化复杂的 XMLSchema

不过,我们还可以采用ref元素来重新编写这个Schema文档: address2.xsd

----------------------

1:

2:

4: 6:

7: 10: 11: 12:

13: 15:

16: 20: 21: 22:

23:

使用ref元素可以直接将其指向另一个模块,使文档更加具有可读性。

定义属性

加入实例文档的元素包含属性,怎么办呢?

在 complexType 中,首先定义子元素,然后再定义元素的属性。

customer2.xml ---------------

Teiki

No.237, Road Waitan, Shanghai

那就这样写Schema文档: customer2.xsd ------------------

1:

2:

4: 6:

7:

10:

11: 13: 14:

15:

很简单,在元素定义完成后,再用元素id。

定义相同子元素的数量

先看这个简单的订购数据实例文档:

order.xml ---------

Accounting Book Taxation Book

假设元素,即每次的订购书目不能超过10种,那该怎么写这个Schema文档呢?这里要用到的maxOccurs属性。

order.xsd

--------------------

1:

2:

4: 6:

7: 9: 10: 11:

12:

第7行中的maxOccurs属性为10,代表orderItem元素可以最大有10个。如果,不设定元素个数,则可以用maxOccurs=\来定义.

类似,如果要定义最小值,可以使用minOccurs,比如下面这句:

定义可选的子元素

假如上面的订书数据中,可以用书名或者书号任一一种订购,则实例文档可能如下:

order2.xml -----------------

Accounting Book

7-5058-3496-7

这时书写Schema文档还需要使用choice元素。 choice 表示从提供的元素中选择某一个元素。

order2.xsd

------------------------- 1:

2:

4: 6:

7: 9: 10: 11:

12: 14:

15: 18: 19: 20:

21:

稍微更复杂的可选项子元素,可以设置缺省值

再稍微修改一下订书数据的实例文档:

order3.xml -----------------

Accounting Book 2

7-5058-3496-7

这里假定值为1时,缺省。

如何修改Schema文档呢?

order3.xsd -----------------

1:

2:

4: 6:

7: 9: 10: 11:

12: 14: 15:

16:

19: 21: 22: 23:

24:

19行中的quantity最少出现值为0,也就是可以有,也可以没有。

当然,也可以直接在元素中,包含quantity,然后定义它的minOccurs。

XML Schema内置简单类型

内建于XML Schema的简单类型有44种。他们在XML Schema推荐标准的第二部分中公布,

下面这是一张内置类型的层次结构图:

自定义简单类型

如果内置简单类型的44种还不能满足要求,怎么办呢?下面学习自定义简单类型。(XML的扩展性充分体现在这里)

例如这个实例文档:

order4.xml -----------------

7-5058-3496-7 5

ID是一个标准的ISBN编码,我们怎么定义这个ISBN编码呢?

idType是一个自定义的简单类型。 我们对它做了限制:

value=\这是一个正则表达式,关于正则表达式,以后再介绍。嘻嘻!

利用这个自定义的简单类型,我们可以重新写Schema文档:

order4.xsd ---------------

1:

2:

4:

5: 6:

7: 9: 10: 11:

12: 14:

15:

16: 18: 19: 20:

21:

23: 25: 26:

27:

假如我们事先确定好ID只有3个,即只有3个ISBN是可选的,那怎么办?我们可以用enumeration元素来进行列举。

再来看订购量quantity的值,如果我们设定其值必须在1-10之间,该怎么办呢?可以这些自定义一个简单类型。

其中,minInclusive,maxInclusive分别代表该类型的取值范围。

所以最终修改后的Schema文档如下:

order4-1.xsd

----------------------

1:

2:

4: 6:

7: 9: 10: 11:

12: 14:

15:

16: 18: 19: 20:

21:

23: 27: 28:

29: 34: 35:

36:

跟我学XML Schema(10):定义属性

元素的属性如何在Schema文档中定义

比如上面的order.xml实例文档中:

对此,我们在Schema文档中采用一个attribute来定义:

order.xsd

---------

←空元素

那么,实例文档中该属性值是必须的还是可有可无的呢?我们可以这样限制:

这里我们讲id属性类型作为一种自定义数据类型idType。 而且,用attribute元素的use属性来定义是否是必须的属性。 required是必须值,optional是可选值,prohibited是无属性值。

那么对于属性的缺省值,我们怎么定义呢? 比如:

我们还可以用attribute元素的另一个属性default来定义:

所以,我们可以重新写出一个Schema文档:

order2.xsd --------------

使用属性组

上面的属性我们定义我们还可以采用属性组的办法来重新改写Schema文档。

order3.xsd ----------------

1:

3:

4: 6: 7:

8:

9:

10:

这个属性组就不详细解释了,不过,大家一看就清楚了吧。

最后,我们写一个完整的订书order.xml的Schema文档。 1:

2:

4: 6:

7:

9: 10: 11:

12:

14:

15: 17: 18:

19:

20:

21: 23:

24:

26: 28: 29:

30:

XPath

模仿 Unix 文件系统的处理方式,在 XML 中可以使用 XPath 来取得 XML 内的数据。 可以通过 XmlSpy 来方便地学习 XPath。

下面练习中使用的 XML 文档,这是在前面网站应用程序中使用的配置文件。

connectionString=\server=CAIT-KN69NNTMOI;database=vote;integrated security=true\

Source=CAIT-KN69NNTMOI;Initial Catalog=Vote;Integrated Security=True\ providerName=\System.Data.SqlClient\

打开 XmlSpy 中的 XPath 对话框。

打开后,可以看到 XPath 的对话框

文档的根 /

类似于 Unix 文件系统的根,在 XML 中使用 / 表示整个 XML 文档。

绝对路径

从 / 开始的路径称为绝对路径,绝对路径可以准确地描述数据,但是一般比较长,写出来比较复杂。

下面取得 XML 文档的根元素。

取得多个元素。

相对路径

不是从 / 开始的路径称为相对路径,相对路径一般比较短,但是,正确使用相对路径要看其起始位置是否正确。

.

单个的圆点 (.) 表示当前节点 ..

连续两个圆点 (..) 表示当前节点的上一级节点。

元素名

元素名用于选择当前上下文中具有指定名称的所有元素。 例如:

/persons/person 表示选择 persons 根元素下的所有名为 person 的元素节点。

属性名

为了与元素名称相区分,通过在属性名称的前面增加 @ 符号来表示这是属性的名称。 例如:

/persons/person/@name 表示获取 person 元素的 name 属性的值。

特殊的节点处理:

对于一些没有名称的节点,通过特殊的函数来取得,例如: text() 取得文本内容节点 comment() 取得注释节点 processing-instruction() 取得处理指令的节点

还有一些特殊的通配符号

*

匹配任何类型的元素节点

不匹配任何属性、文本节点、注释或处理指令

可以在 * 前添加名称空间,只处理指定的名称空间元素

匹配所有节点:元素、文本、属性、处理指令、名称空间和注释 匹配所有的属性节点

可以在通配符中添加名称空间,如@xlink:*

node() @*

多种匹配可以进行组合,通过 | 可以合并节点的集合

// 从所有的后代中获得

从当前节点开始不考虑层次的选择节点 例如:

//person 表示从当前的上下文中,不考虑层次的获取所有的 person 元素。

谓词:[ ]

谓词相当于 SQL 中的 Where 条件,可以用于筛选符合条件的节点 例如:选择 子元素 profession 的值为 ?physicist?的元素 //profession[ profession=?physicist?]

谓词中的逻辑运算 and 与运算 or 或运算

数学运算

XPath 提供了 5 种基本的算术运算符 ? + ? - ? * ? div 除法 ? mod 取模

字符串运算

? ? ? ? ? ?

= != > < <= >=

布尔值

? true()

? false() ? not()

函数的返回值类型

? ? ? ?

布尔值 数字 节点集 字符串

处理节点的函数

? ? ? ? ? ? ?

position() last() count() id() local-name namespace-uri name

返回当前节点的位置序号

返回上下文节点集中的节点数 返回节点集参数中的节点数

返回文档中具有指定 id 的节点集的集合 返回第一个节点的本地名

返回第一个节点的名称空间URI 返回第一个节点的带有前缀的名称

字符串函数

? ? ? ? ? ? ? ?

string starts-with contains substring-before substring-after substring string-length() normalize-space

检查第一个参数是否以第二个参数开始 检查第一个参数是否包含第二个参数

返回第一个参数中,第二个字符串第一次出现之前的子字符串 返回第一个参数中,第二个字符串第一次出现之后的子字符串 返回第一个参数字符串中从第二个参数开始,第三个参数个字符 返回字符串的长度

格式化元素内容中的空白

XSLT

XSL (扩展样式表语言) 是一种脚本语言,有两个部分组成,

1、 用来将 XML 文件转换成另一个 XML 文件,称为 XSLT (XSL-Transformation)。 2、 格式化 XML 文件。称为 FO(XSL Formatting Object)。

由于 FO 一直没有成为正式的标准,所以使用较少,我们学习属于转换部分 XSLT

XSLT 是一种 XML 应用,通过指定 XML的转换规则来对 XML 文档进行转换。

XSLT 工作原理,首先建立 XML 文件的转换模板,通过 XSLT 处理器,产生最后转换的结果。

开始,模版和取值

例如,有如下 XML 文件

大家好

可以使用如下文件进行转换

测试 XSLT

其中:

version 属性指定 xslt 的版本,xmlns 指定元素的命名空间。在 xslt 文件中,根元素的标记必须是 stylesheet

xslt 使用模板的概念进行 xml 文件的转换,每一个需要转换的元素要有指定的模板,

对元素进行取值,使用

不属于模版的内容将被原样输出

所以上述转换会得到一个普通的 html 文件。

如何取得属性的内容

通过在属性名称前增加 @ 符号来指定名称是一个属性

在上面的文件中增加一个属性

可以通过如下 xslt 来进行转换

测试 XSLT

在上面出现了 /hello/@name ,称为 XPath 路径,通过 XPath 来表达指定的元素。

递归运算

在上面的例子中增加一层子元素

可以使用如下的 xslt 进行转换

测试 XSLT

表示使用模版对所有子元素进行转换,转换器会自动查找匹配的元素模版进行转换

在这里进行了 hello 元素的模版声明,所以转换器将使用这个模版对 hello 元素进行转换

由于我们在这个模版中嵌套了一个 ,所以转换将递归进行下去,直到最后

可以使用属性 select 指定递归模版的元素的起始元素

可扩展标记语言<title>XML 字符集</definition> </item> <item> <title version=\ <definition>统一资源标识符号<title>URI

显示列表

XML的专有名词


()

上例通过指定 select 属性来确定需要递归的元素名称.

循环

递归操作比较复杂,对已经确定的元素,可以使用循环来遍历节点

这是一个由多个节点的 XML 文件,可以通过遍历来将图书信息显示出来

F8915 ASP网页制作彻底研究 陈会安 580

F8916 ASP与IIS 4/5网站架设彻底研究 陈会安 550 F8421A Windows 98第二版区域网路筑巢专家 陈会安 480 F8111 FrontPage 2000 HomePage筑巢专家 陈会安 500 F8516 Office 2000 Plus ASP网路商店筑巢专家 陈会安 550

循环遍历使用

其中 select 用来确定循环的条件

本文来源:https://www.bwwdw.com/article/24p7.html

Top