用XPath精确定位节点元素
<!-- START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters -->
<!-- END RESERVED FOR FUTURE USE INCLUDE FILES-->
用XPath精确定位节点元素
在利用XSL进行转换的过程中,匹配的概念非常重要。在模板声明语句
xsl:template match = ""和模板应用语句xsl:apply-templates select = ""
中,用引号括起来的部分必须能够精确地定位节点。具体的定位方法则在XPath中给出。
之所以要在XSL中引入XPath的概念,目的就是为了在匹配XML文档结构树时能够准确
地找到某一个节点元素。可以把XPath比作文件管理路径:通过文件管理路径,可以
按照一定的规则查找到所需要的文件;同样,依据XPath所制定的规则,也可以很方
便地找到XML结构文档树中的任何一个节点,显然这对XSLT来说是一个最最基本的功能。
XPath数据类型
XPath可分为四种数据类型:
- 节点集(node-set)
节点集是通过路径匹配返回的符合条件的一组节点的集合。其它类型的数据不能
转换为节点集。
- 布尔值(boolean)
由函数或布尔表达式返回的条件匹配值,与一般语言中的布尔值相同,有true和
false两个值。布尔值可以和数值类型、字符串类型相互转换。
- 字符串(string)
字符串即包含一系列字符的集合,XPath中提供了一系列的字符串函数。字符串可
与数值类型、布尔值类型的数据相互转换。
- 数值(number)
在XPath中数值为浮点数,可以是双精度64位浮点数。另外包括一些数值的特殊描
述,如非数值NaN(Not-a-Number)、正无穷大infinity、负无穷大-infinity、
正负0等等。number的整数值可以通过函数取得,另外,数值也可以和布尔类型、
字符串类型相互转换。
其中后三种数据类型与其它编程语言中相应的数据类型差不多,只是第一种数据类型是XML文档树的特有产物。
XPath节点类型
另外,由于XPath包含的是对文档结构树的一系列操作,因此搞清楚XPath节点类型
也是很必要的。回忆一下第二章中讲到的XML文档的逻辑结构,一个XML文件可以包
含元素、CDATA、注释、处理指令等逻辑要素,其中元素还可以包含属性,并可以利
用属性来定义命名空间。相应地,在XPath中,将节点划分为七种节点类型:
- 根节点(Root Node)
根节点是一棵树的最上层,根节点是唯一的。树上其它所有元素节点都是它的子节点
或后代节点。对根节点的处理机制与其它节点相同。在XSLT中对树的匹配总是先从根
节点开始。
- 元素节点(Element Nodes)
元素节点对应于文档中的每一个元素,一个元素节点的子节点可以是元素节点、注释
节点、处理指令节点和文本节点。可以为元素节点定义一个唯一的标识id。
元素节点都可以有扩展名,它是由两部分组成的:一部分是命名空间URI,另一部分是
本地的命名。
- 文本节点(Text Nodes)
文本节点包含了一组字符数据,即CDATA中包含的字符。任何一个文本节点都不会有紧
邻的兄弟文本节点,而且文本节点没有扩展名。
- 属性节点(Attribute Nodes)
每一个元素节点有一个相关联的属性节点集合,元素是每个属性节点的父节点,但属
性节点却不是其父元素的子节点。这就是说,通过查找元素的子节点可以匹配出元素
的属性节点,但反过来不成立,只是单向的。再有,元素的属性节点没有共享性,也
就是说不同的元素节点不共有同一个属性节点。
对缺省属性的处理等同于定义了的属性。如果一个属性是在DTD声明的,但声明为
#IMPLIED,而该属性没有在元素中定义,则该元素的属性节点集中不包含该属性。
此外,与属性相对应的属性节点都没有命名空间的声明。命名空间属性对应着另一
种类型的节点。
- 命名空间节点(Namespace Nodes)
每一个元素节点都有一个相关的命名空间节点集。在XML文档中,命名空间是通过保留
属性声明的,因此,在XPath中,该类节点与属性节点极为相似,它们与父元素之间的
关系是单向的,并且不具有共享性。
- 处理指令节点(Processing Instruction Nodes)
处理指令节点对应于XML文档中的每一条处理指令。它也有扩展名,扩展名的本地命
名指向处理对象,而命名空间部分为空。
- 注释节点(Comment Nodes)
注释节点对应于文档中的注释。
一个XML文档树
我们来构造一棵XML文档树,作为后面举例的依托:
<A id="a1">
<B id="b1">
<C id="c1">
<B name="b"/>
<D id="d1"/>
<E id="e1"/>
<E id="e2"/>
</C>
</B>
<B id="b2"/>
<C id="c2">
<B/>
<D id="d2"/>
<F/>
</C>
<E/>
</A>
|
以下将要介绍一些XPath中节点匹配的基本方法。
路径匹配
路径匹配与文件路径的表示相仿,比较好理解。有以下几个符号:
(1)用“/”指示节点路径
如“/A/C/D” 表示节点"A"的子节点"C"的子节点"D",即id值为d2的D节点,
“/”表示根节点。
(2)用“//” 表示所有路径以"//"后指定的子路径结尾的元素
如“//E” 表示所有E元素,结果是所有三个E元素,
如“//C/E”表示所有父节点为C的E元素,结果是id值为e1和e2的两个E元素 。
(3)用“*” 表示路径的通配符
如“/A/B/C/*”表示 A元素→B元素→C元素下的所有子元素,即name值为b的B元素、
id值为d1的D元素和id值为e1和e2的两个E元素
“/*/*/D”表示上面有两级节点的D元素,匹配结果是id值为d2的D元素 ,
如“//*”表示所有的元素。
位置匹配
对于每一个元素,它的各个子元素是有序的。
如:/A/B/C[1]表示A元素→B元素→C元素的第一个子元素,得到name值为b的B元素
/A/B/C[last()]表示A元素→B元素→C元素的最后一个子元素,得到id值为e2的E元素
/A/B/C[position()>1]表示A元素→B元素→C元素之下的位置号大于1的元素,得到id值为d1的D元素和两个具有id值的E元素
属性及属性值
在XPath中可以利用属性及属性值来匹配元素,要注意的是,元素的属性名前
要有"@"前缀。例如:
//B[@id]表示所有具有属性id的B元素,结果为id值为b1和b2的两个B元素
//B[@*]表示所有具有属性的B元素,结果为两个具有id属性的B元素和一个具有name属性B元素
//B[not(@*)]表示所有不具有属性的B元素,结果为A元素→C元素下的B元素
//B[@id="b1"] id值为b1的B元素,结果为A元素下的B元素
亲属关系匹配
XML文档可归结为树型结构,因此任何一个节点都不是孤立的。通常我们把节点之
间的归属关系归结为一种亲属关系,如父亲、孩子、祖先、后代、兄弟等等。在对
元素进行匹配时,同样可以用到这些概念。例如:
//E/parent::* 表示所有E节点的父节点元素,结果为id值为a1的A元素和id值为c1的C元素
//F/ancestor::* 表示所有F元素的祖先节点元素,结果为id值为a1的A元素和id值为c2的C元素
/A/child::* 表示A的子元素,结果为id值为b1、b2的B元素,id值为c2的C元素,以及没有任何属性的E元素
/A/descendant::* 表示A的所有后代元素,结果为除A元素以外的所有其它元素
//F/self::* 表示所有F的自身元素,结果为F元素本身
//F/ancestor-or-self::* 表示所有F元素及它的祖先节点元素,结果为F元素、F元素的父节点C元素和A元素
/A/C/descendant-or-self::* 表示所有A元素→C元素及它们的后代元素,结果为id值为c2的C元素、该元素的子元素B、D、F元素
/A/C/following-sibling::* 表示A元素→C元素的紧邻的后序所有兄弟节点元素,结果为没有任何属性的E元素
/A/C/preceding-sibling::* 表示A元素→C元素的紧邻的前面所有兄弟节点元素,结果为id值为b1和b2的两个B元素
/A/B/C/following::* 表示A元素→B元素→C元素的后序的所有元素,结果为id 为b2的B元素、无属性的C元素、无属性的B元素、id为d2的D元素、无属性的F元素、\无属性的E元素。
/A/C/preceding::* 表示A元素→C元素的前面的所有元素,结果为id为b2的B元素、id为e2的E元素、id为e1的E元素、id为d1的D元素、name为
b的B元素、id为c1的C元素、id为b1的B元素
条件匹配
条件匹配就是利用一些函数的运算结果的布尔值来匹配符合条件的节点。常用于条件
匹配的函数有四大类:节点函数、字符串函数、数值函数、布尔函数。
例如last()、position()等等,这里我们就不再赘述。
以上这些匹配方法中,用得最多的还要数路径匹配。在上一章样式表的例子中,
无论是在语句<xsl:template match="学生花名册">中,还是在语句
<xsl:value-of select="名字"/>中,都是依靠给出相对于当前路径的子路
径来定位节点的。
分享到:
相关推荐
在本部分的内容中,我们将会详细介绍XML路径语言(XPATH)的相关知识。XPATH是用于在XML文档中寻找信息的语言,并且是XML技术中非常核心的一个部分,常用于XSLT(Extensible Stylesheet Language Transformations)...
在本教程中,我们将深入探讨XML认证的一个关键部分——DOM(Document Object Model)解析器。 DOM解析器是处理XML文档的一种方法,它将XML文件加载到内存中并构建一个树形结构,称为DOM树。这个树形结构允许程序...
通过学习这些XML相关知识,你将能够熟练地创建、解析和处理XML文档,同时为XML认证考试做好充分准备。记得深入理解每一个概念,并结合实际编程实践来巩固所学。提供的压缩包文件“XML教程及认证考试相关资料”中应...
XML,全称可扩展标记语言...以上就是XML教程的主要内容,从基础到高级,涵盖了XML的核心概念、验证方法、解析方式以及与其他技术的结合。理解并掌握这些知识点,对于在IT行业从事数据处理、Web开发等工作是至关重要的。
压缩包中的文件名称列表可能代表了XML认证资料的不同部分,如PDF图标可能表示有详细的PDF教程或手册,其他的图形文件可能用于美化或组织文档的布局。学习这些资料可以帮助你深入理解XML的各个方面,从基础概念到高级...
至于压缩包子文件的文件名称列表中,“中国IT认证实验室学习下载频道.txt”可能包含了一些学习资源的链接或者介绍,这部分内容可以帮助扩展XML学习的资源库。而“VC++编程技巧与范例”虽然不是直接与XML相关的,但...
XML越来越热,关于XML的基础教程网络上也随处可见。可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。...
这部分内容可能会涵盖XML的创建、解析、验证、DOM(Document Object Model)和SAX(Simple API for XML)解析模型、XPath表达式、XSLT转换以及XML Schema的使用。 通过学习这个教程,系统架构设计师可以了解如何在...
在XML(Extensible Markup Language)认证教程中,模拟题2涉及到的关键知识点主要包括XML文档结构、DTD(Document Type Definition)、XPath、XSLT以及XML数据处理。 1. 题目1关注的是XML文档中的ID和IDREF属性以及...
**XML认证教程,第4部分:XSL样式单** 在XML认证教程的这一部分,我们专注于XSL样式单的使用和应用。了解如何正确编写和使用XSLT是提升XML处理能力的关键。通过学习XSLT,你可以创建强大的数据转换工具,不仅可以...
这可能涉及到XPath(XML Path Language)来选取特定的题目,或者XSLT(Extensible Stylesheet Language Transformations)转换XML结构以形成试卷布局。 4. 用户界面:用户界面可能使用Java Swing或JavaFX等Java GUI...
在XQuery中,XPath是基础组成部分之一,用来指定要查询的XML元素路径。 **2. FLWOR表达式** FLWOR(For, Let, Where, Order, Return)表达式是XQuery中的一种重要语法结构,它允许用户按照特定顺序定义查询过程,...
这可能涉及到DOM模型、XPath查询或者XSLT转换,帮助开发者理解如何在Web应用中有效地管理和利用XML数据。 HelloService目录可能是一个简单的Web服务示例,使用ASP.NET的Web服务(ASMX)或WCF(Windows ...
- **安全性**:Java的安全模型设计用于防止病毒和恶意代码,它限制了代码对系统资源的访问,并通过数字签名提供了代码认证。 2. **Web开发工具和资源**: - **API查询网站**:如gotapi.com提供HTML、CSS、XPath等...
6. **System.Xml**: 处理XML文档,包括XmlNode、XmlElement、XmlDocument等类,以及XPath和XDocument提供查询XML文档的高级方法。 7. **System.Data**: 数据访问相关的类库,如DataSet、DataTable和DataRow,它们是...
XPath是XML路径语言,用于在XML文档中查找信息;CSS选择器则类似于CSS用于样式选择的方式,同样适用于HTML。 6. **Item和Item Pipeline**:Item是Scrapy中的数据容器,用于定义要抓取的数据结构。Item Pipeline则...
XML允许自定义标签,用于数据交换和存储,常与XSLT、XPath等技术配合使用。 3. **SQL**(Structured Query Language):是用于管理和处理关系数据库的标准编程语言。学习SQL包括了解数据查询、更新、删除、插入等...
Agent、varnish、vpopmail、wddx、win32、wincache、XML、XMLRPC、XPath、Yaz、Zip、zlib等众多函数和库的详细说明。 总的来说,《PHP中文黄金手册》是PHP开发者全面学习和查阅PHP知识的宝贵资源,无论你是初学者...