用XSLT和Xpath查询XML文档Word文档下载推荐.docx
- 文档编号:7786553
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:82
- 大小:71.92KB
用XSLT和Xpath查询XML文档Word文档下载推荐.docx
《用XSLT和Xpath查询XML文档Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《用XSLT和Xpath查询XML文档Word文档下载推荐.docx(82页珍藏版)》请在冰点文库上搜索。
XML实现了用定义它们自己的标记集来说明文档内容的功能,说明的精度由实现者自己掌握。
XML支持对文档内容的验证。
XML文档的内容和结构是由DTD或XML
Schema来定义,我们可以根据它们来检验文档的有效性。
XML允许开发各种不同专业领域的特定标记语言,如:
CML,MathML等。
XML是非专有并易于阅读和编写的。
这使得它成为在不同应用间交换数据的理想格式。
XML是基于W3C定制的开放标准,从而使得基于XML的应用具有广泛性。
XML支持高级搜索。
因为根据XML的语法规则,可以知晓文档内容的结构和含义,所以在XML文档中的搜索较为容易。
如果web页是XML格式的,则搜索会更高效,而且不仅可以搜索数据,还可以在搜索中加入与数据相关的上下文信息,形成更为精确的搜索机制。
正因为XML有相对于HTML的这些优点,有人把它称为下一代的web语言,甚至把XML说成是21世纪的世界语,这些都说明了XML的巨大潜力。
1.1.3XML文档的结构
1.1.3.1规范的XML文档
在编写XML文档时,必须保证文档结构的规范性,这样浏览器才能对其作出正确的解释,否则会报错。
W3C在XML1.0推荐标准中对XML文档的规范性作了定义。
当一个文本对象满足下列条件时,就是一个规范的XML文档:
整体上是一个标记文档。
必须满足XML1.0规范中所有的规范约束,即必须遵循XML1.0推荐标准中规定的语法规则。
文本中直接或间接引用的解析实体都是规范的。
1.1.3.2XML数据结构
所有规范的XML文档都由以下三部分组成:
序言(可选),它包含关于数据其余部分的重要信息。
主体,它由一个或多个元素以层次树的形式组成。
尾声(可选),紧随元素树以各种各样的形式出现。
序言用于标记XML数据的开始,它描述数据的字符编码,并为XML解析
器和应用程序提供一些其它的配置线索。
序言包括:
一个XML声明,一个可选的文档类型声明,以及多个可选的注释,处理指令和空白字符等。
主体是XML文档中唯一必须存在的部分,是XML数据最主要的内容。
它包括:
元素,属性,字符数据等,除此之外,注释,处理指令和空白字符也可交叉存储在元素和字符数据中。
主体被组织成一棵层次树,在这棵树中存在唯一的根节点,其对应的元素为文档元素,是树中所有其它元素的父元素,文档中所有其它元素都是它的后代。
父—子元素之间要正确的嵌套。
尾声是可选的,它可能包括:
注释,处理指令或空白字符。
1.1.4本文的出发点
对于XML文档,业界有两种不同的观点:
其一,以文档为中心的观点认为XML文档是一种带批注的文本文件,该文件包含标记指令,用于控制被包含文本的格式和显示,强调XML的语法并将尖括号视为XML的中心主题。
其二,以数据为中心的观点认为XML只是类型化值的许多种表示方法中的一种,软件代理程序可以利用其进行数据互换和互操作,而将XML语法视为次要的细节。
本文从后一种观点出发,论述运用Xpath和XSLT查询XML文档。
Xpath维持原文档的层次性和结构,适用于访问XML文档的独立节点,XSLT适用于对查询结果进行处理,构建新的元素,在有必要的时候重新组织结果元素,综合运用XSLT和Xpath将允许开发者随意而方便的对源文档进行操作和重组。
由于Xpath是XSLT的基础和核心。
所以在谈到XSLT之前须先对Xpath进行介绍。
Xpath,即XML的路径语言,这一名称源于Xpath使用基于路径的语法遍历文档的信息集。
另外,Xpath的数据模型与XMLInfoset的[parent]/[childen]模型平行,每个Xpath节点的属性都可以通过对应的XMLInfoset信息项的属性查看,因此,在谈及Xpath之前有必要对XMLInfoset作一介绍。
1.2XMLInfoset
1.2.1XMLInfoset简介
XMLInfoset(XMLInformationSet)是所有XML规范中最关键的规范,该Infoset将XML的核心抽象概念模型化为一组具有一个或多个命名属性的结构信息项的集合。
它的用途是为那些需要引用XML文档中的信息的规范提供一组一致的定义。
如果一个XML文档是规范的,并满足命名空间的限制条件,那么这个文档就有一个信息集,不符合命名空间的XML文档,即使就技术上而言是规范的也被认为不具有有意义的信息集,但有信息集的XML文档不一定必须是有效的。
信息集可以通过解析XML文档的方式来创建,也可以通过其它方式构造,如:
DOM。
XML文档信息集由若干信息项组成,在这些信息集中必然包含一个文档信息项和几个其它的信息项。
信息项是对XML文档中某个部分的抽象描述,每个信息项有一组相关的属性。
规范将XML信息集表示为一棵树,但并不一定要用树结构来构造XML信息集。
在XML信息集树中,文档信息项是树根,而处理指令,注释和字符信息项作为叶子节点,元素信息项作为内部节点。
另外,XMLInfoset还定义了两个属性[parent]和[children]。
[parent]属性引用包含信息项,[children]属性是子代的有序集合,根据信息集树图,文档信息项没有[parent]属性,处理指令,注释和字符信息项没有[children]属性,元素信息项可以同时具有这两项属性,尽管其[children]属性可能为空。
1.2.2XMLInfoset的信息项
本文采用的XMLInfoset是W3C2004年2月4日发布的推荐标准,本标准的一个信息集最多可包含11种不同类型的信息项,每个信息项都有若干属性,每个属性都被赋予一个名称,属性名用方括号括起来。
这里只对与Xpath树模型中的节点相应的信息项作一介绍,其余的信息项不作过多的说明。
1.2.2.1文档信息项
每个信息集有且只有一个文档信息项,信息集中其余所有信息项都可以从文档信息项的属性以及属性的属性等来获得。
文档信息项包含以下属性:
[children]:
是一个子信息项的有序列表,此有序列表含有一个元素信息项,所有位于文档元素(即XML文档主体元素树的根)外部的处理指令,注释在此列表中都有一个相应的处理指令信息项和一个注释信息项,而位于DTD中的处理指令和注释在本列表中没有相应的信息项。
如果XML文档有文档类型声明,则在此列表中有一个文档类型声明信息项。
[documentelement]:
对应于文档元素的元素信息项。
[notation]:
一个格式信息项的无序集合。
所有在DTD中声明的格式在本无序集合中都有一个相应的格式信息项。
如果存在被多次声明的格式,则该属性没有值。
[unparsedentities]:
一个非解析实体的无序集合。
所有在DTD中声明的非解析实体在本集合中都有一个非解析实体信息项。
[baseURI]:
文档实体的基准URI。
[characterencodingscheme]:
文档实体采用的字符编码方案的名称。
[standalone]:
本属性表明XML文档是否是一个独立的文档。
它的值是根据XML声明中的独立文档声明来设定的。
如果没有独立文档声明,则该属性没有值。
[version]:
一字符串,表明文档遵循的XML版本号。
本属性值是根据XML声明中的版本信息来设定的,如果没有声明,则本属性没有值。
[alldeclarationsprocessed]:
严格地说,本属性不属于文档信息集的一部分,它仅表明XML处理器是否已经读过了整个的DTD。
本属性的值是一个布尔值,取false或true。
1.2.2.2元素信息项
对于出现在XML文档中的每一个元素,在信息集中都有一个相应的元素信息项,其中必有一个文档信息项[documentelement]属性的值,该元素信息项对应于元素树的根,以该元素信息项为起点递归地访问[children]属性,可获得其余所有元素信息项。
元素信息项包含下列属性:
[namespacename]:
元素类型的命名空间。
如果元素不属于任何命名空间,则本属性没有值。
[localname]:
元素类型名的本地名,本属性不包括命名空间前缀和冒号。
[prefix]:
元素类型名的命名空间前缀。
如果元素类型名没有前缀,本属性没有值。
一个子信息项的有序列表。
此列表包含元素信息项,处理指令信息项,未展开实体引用信息项,字符信息项和注释信息项。
对于出现在当前元素中的每个元素,处理指令,对未展开外部实体的引用,字符和注释,在此列表中都有一个相应类型的信息项。
对于空元素,此列表为空。
[attributes]:
一个属性信息项的无序集合。
对于元素的每个属性(无论是显式指定属性值,还是根据DTD得到的缺省属性值),在本集合中都有一个相应的属性信息项。
但元素的命名空间声明不包括在此无序集合中。
如果元素没有属性,则本集合为空。
[namespaceattributes]:
对于元素的每个命名空间声明(无论是显式指定属性值,还是根据DTD得到缺省属性值),在该集合中都有一个相应的属性信息项。
取消缺省命名空间的声明和取消前缀的声明也被认为是一个命名空间声明。
所有的命名空间属性都有一个命名空间URI。
如果元素没有命名空间声明,该无序集合为空。
[in-scopenamespace]:
一个命名空间信息项的无序集。
对于在元素范围内有效的每个命名空间,在本无序集中都有一个相应的命名空间信息项。
本无序集合总含有一个[prefix]属性值为”XML”的命名空间信息项。
命名空间前缀”XML”被隐式地绑定在命名空间http:
//www.w3.org/XML/1998/namespace上。
本无序集合不包含[prefix]属性值为”xmlns”的命名空间信息项,包含[namespaceattributes]属性中的所有命名空间信息项(除了那些代表xmlns=’’’’和xmlns:
name=’’’’的命名空间信息项,因为它们没有声明命名空间,而是取消声明缺省命名空间或命名空间前缀)。
在解析被限定名称的命名空间前缀时,本属性应优先于[namespaceattributes]属性被使用,因为在合成的信息集中这两个属性可能不一致。
元素的基准URI。
[parent]:
本属性值是一个文档信息项或元素信息项,此信息项的[children]属性包含本信息项。
1.2.2.3属性信息项
对于元素的每个属性(无论是显式指定属性值,还是根据DTD得到缺省属性值),包括命名空间声明,都有一个相应的属性信息项。
一般属性对应的属性信息项出现在元素信息项的[attributes]中。
既没有缺省值又没在使用时显式指定属性值的属性没有对应的属性信息项。
属性信息项包含如下属性:
属性的命名空间。
对于不属于任何命名空间的属性,本属性没有值。
属性的本地名。
本属性不含命名空间前缀和冒号。
属性名的命名空间前缀。
对于不包含命名空间前缀的属性名,本属性没有值。
[normalizedvalue]:
规范化后的属性值。
[specified]:
此属性为一标记,它表示属性值是在元素的首标签中显式指定,还是取自DTD中的缺省值。
[attributetype]:
属性值的类型。
属性的合法类型有:
ID,IDREF,IDREFS,ENTITIES,NMTOKEN,NMTOKENS,NOTATION,CDATA和ENUMERATION。
对于没有声明的元素,该属性没有值。
如果尚未读到声明,并且文档信息项的[alldeclarationsprocessed]为false,则此属性值为未知。
此属性的值不受属性值有效性的影响。
[references]:
如果[attributetype]值为ID,NMTOKEN,NMTOKENS,CDATA或ENUMERATION,则此属性没有值;
如果[attributetype]为未知,则此属性值也为未知,否则本属性值为一有序列表。
该有序列表包含属性值引用到的元素信息项,非解析实体信息项,格式信息项。
[ownerelement]:
此属性值为一个元素信息项,它的[attributes]属性包含本信息项。
1.2.2.4处理指令信息项
文档中的每个处理指令都有一个相应的处理指令信息项,但XML声明以及文本声明不属于处理指令。
处理指令信息项有如下的属性:
[target]:
此属性值为一个字符串,表示PI的目标。
[content]:
此属性值为一字符串,表示PI的内容。
若PI没有内容,则此属性值为一空字符串。
PI的基准URI。
此属性为一格式信息项,该信息项的[name]属性值与本PI信息项的[target]属性值相同。
如果该格式未被声明或多次声明,则本属性没有值;
如果尚未读到声明,并且文档信息项的[alldeclarationsprocessed]属性为false,则本属性值为未知。
此属性值为一文档信息项,元素信息项或文档类型声明信息项,该信息项的[children]属性包含本信息项。
1.2.2.5字符信息项
文档中出现的每个数据字符(无论是字符引用还是CDATA段中的字符)都有一个相应的字符信息项。
每个字符在逻辑上都是分开的信息项,但XML应用程序可以根据需要自由地将字符组织成更大的块。
字符信息项有如下的属性:
[charactercode]:
字符对应的ISO10646字符代码。
[elementcontentwhitespace]:
此属性值为一布尔量,表明一个字符是否是元素内容中的空白。
在字符不是空白的情况下,其值为false。
此属性值为一元素信息项,该信息项的[children]属性包含本信息项。
1.2.2.6注释信息项
XML文档中的每一个注释(除了DTD中的外)都有一个相应的注释信息项。
注释信息项包含如下的属性:
此属性值为一字符串,它表示注释的内容。
此属性值为一文档信息项或元素信息项,该信息项的[children]属性值包含本信息项。
1.2.2.7命名空间信息项
每个元素对应的元素信息项都有一个[in-scopenamespace]属性,对于在该元素范围内有效的每个命名空间绑定在这个属性中都有一个相应的命名空间信息项。
命名空间信息项包含如下属性:
命名空间前缀。
从语法上说,本属性的值为属性名中位于前缀“xmlns”后的部分。
如果属性名为“xmlns”(即声明缺省命名空间),则本属性没有值。
命名空间前缀对应的命名空间名。
1.2.2.8其它信息项
在W3C2004年2月4日发布的XMLInfoset推荐标准中,还有其它四种类型的信息项,它们是:
格式信息项,非解析实体信息项,文档类型声明信息项和未展开实体引用信息项,这几种信息项分别用于描述在DTD中声明的每个格式,每个非解析一般实体,XML文档中的文档类型声明以及每个尚未展开的对外部一般实体的引用。
2.Xpath
2.1Xpath概述
2.1.1Xpath简介
XMLInfoset的定义暗示了给定的XML文档中信息项的固有层次关系,这些固有的关系有助于对文档子集寻址,然而,XMLInfoset并未定义寻址和标识这些子集的统一语法。
W3C在1999年11月16日发布了Xpath1.0的推荐标准,事实上,在同一天发布的还有XSLT1.0的推荐标准。
Xpath1.0之所以能够脱离XSLT1.0而单独成为一个规范,是因为W3C认为许多其它的XML规范也需要对文档的各个部分进行寻址访问。
如今,Xpath已成为很多XML相关规范的核心,如:
Xpointer,XQuery等。
Xpath1.0是致力于为XSLT和Xpointer的公共功能提供一种共同的语法和语义的结果。
Xpath的主要目的是对一个XML文档进行寻址,为了支持这个目的,它也为操作字符串,数值和布尔值提供了一些基本的功能。
Xpath利用一个紧凑的,非XML的语法,来实现在URI和XML属性值中的运用,它基于XML文档的逻辑结构,而不是在它的表面语法上进行导航,用来定位XML文档中各个部分和选择文档中的构成部件,如:
元素,属性,文本等。
除了用来寻址外,Xpath自身的一个子集能够用于匹配,即验证一个节点是否匹配某个模式,Xpath的这种用法定义在XSLT的规范中。
2.1.2Xpath数据模型
2.1.2.1Xpath数据模型简介
如前所述,Xpath是运行在XML文档的抽象逻辑结构上的,Xpath的寻址是基于一种节点树模型,该模型将XMLInfoset的相应信息项映射为树模型中的节点(但该树模型中的节点与XMLInfoset的信息项并非一一对应),而XSLT也使用了与Xpath基本相同的数据模型。
Xpath定义了七种节点类型,分别是:
根节点,元素节点,属性节点,文本节点,处理指令节点,注释节点和名称空间节点。
在一个文档的所有节点之间存在着一种称之为文档顺序的顺序,该顺序对应于在XML文档中每个节点的开始标记出现的顺序,具体而言是:
一个元素节点出现在它的所有孩子节点之前,元素的属性节点和命名空间节点出现在该元素的所有孩子节点之前,其中命名空间节点出现在属性节点之前,多个命名空间节点之间的相对顺序依赖于实现,多个属性节点之间的顺序也依赖于是实现。
下面,对Xpath树模型中的七种节点作一介绍:
根节点:
根节点是文档实体本身,它包含所有其它节点,是Xpaht树模型的根。
出现在XML文档序言中以及文档元素之后的处理指令和注释直接作为根节点的孩子节点。
元素节点:
XML文档中的每个元素都对应于树模型中的一个元素节点,元素节点的孩子可以为元素节点,注释节点,处理指令节点,命名空间节点以及其内容的文本节点。
对内部或外部实体的实体引用将被展开,字符引用也被分解。
属性节点:
每个元素节点都有一组相关的属性节点。
在XML标准中详细说明了属性节点的字符串值,它是一个规范化的值`。
命名空间节点:
每个元素节点可以有相关的命名空间节点,它是在XML文档中声明的在元素范围内有效的每个命名空间前缀(包括xml,它是由XML命名空间建议隐式地声明的)以及默认命名空间。
元素节点是它的每个命名空间节点的父节点。
处理指令节点:
除了文档类型声明中的处理指令以外,每个处理指令都对应一个处理指令节点。
注释节点:
除了在文档类型声明中出现的注释以外,每条注释都对应着一个注释节点。
文本节点:
XML源文档中的字符数据构成文本节点,每个文本节点都包含尽可能多的字符数据,而且不会出现两个相邻的文本节点。
考查如下的这个简单的XML文档:
<
?
xmlversion=’1.0’?
>
xml-stylesheethref=”SalesToHTML.xsl”type=”text/xsl”?
SalesReportxmlns=’urn:
schemas-develop-com.music’>
<
company>
<
/company>
period>
2002<
/period>
salesRegion=”eu”>
10000<
/sales>
/SalesReport>
!
--endofSalesReport-->
该文档的Xpath树模型如下:
2.1.2.2Xpath树模型到XMLInfoset的映射
如前所述,Xpath定义了自己的数据模型,该模型是基于节点树的。
Xpath节点的属性都可以通过对应的XMLInfoset信息项属性来查看,例如:
根节点与XMLInfoset的文档信息项相一致,其子节点映射到文档信息项的[children]属性,只包含三种类型的节点:
元素节点,处理指令节点,注释节点。
而元素的属性映射到元素信息项的[attributes]属性,因此不被认为是元素节点的子节点。
从Xpath树模型到XMLInfoset的映射如下:
Xpath节点类型
XMLInfoset信息项
根节点
文档信息项
元素节点
元素信息项
属性节点
属性信息项
文本节点
字符信息项序列
处理指令节点
处理指令信息项
注释节点
注释信息项
名称空间节点
命名空间信息项
表2-1
2.1.3Xpath表达式
2.1.3.1Xpath表达式简介
表达式是Xpath最基本的概念,Xpath表达式分为定位路径表达式,布尔表达式,等式表达式,关系表达式和数值表达式,其中定位路径表达式是Xpath表达式中最重要的一种类型,其余类型的表达式可以用于结果对象不需要是节点集的任何情况,通常出现在Xpath谓词和各种XSLT结构中,如:
xsl:
if
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- XSLT Xpath 查询 XML 文档