XPath语法提要
学习XPath时应记住下述要领:分布定位,看清上下文。XPath定位分多个步骤进行,每个步骤都有单独的上下文环境。
一、 多个定位步骤组合成为一个XML路径
由于XML文档是层次型的结构,不像关系型数据库可以根据主键索引一步到位,所以,XPath分步定位元素,每步称为一个“定位步骤(Location step)”。定位步骤主要有两种:串联的定位步骤和并联的定位步骤。
(1) 串联的定位步骤
每个串联定位步骤之间用“/”分隔开来,从最左边开始,匹配节点,如前面的匹配失败,匹配不到节点,后面的匹配就不会继续进行。
定位步骤有“绝对定位步骤(absolute location step)”和“相对定位步骤(relative location step)”两种。前者是以“/”开头的定位步骤,表示从根节点,即文档节点开始定位;后者不是“/”开头的定位步骤,表示从上下文节点开始定位。
只有出现在XPath最前面的“/”才表示“绝对定位步骤”,在XPath其他地方出现的“/”则用于分隔定位步骤。绝对定位步骤匹配结果与当前节点无关;相对定位步骤匹配结果显然与XPath的上下文相关。同一个XPath表达式,相对于不同的节点,返回的结果不一样,这就是上下文节点对XPath匹配的影响。
(2) 并联的定位步骤
如果要同时匹配不同条件的节点,可以用“|”将多个表达式分隔起来。只有节点符合其中任何一个匹配路径,都会返回到结果中。
二、 XPath表达式的上下文
在上一节已经讲解了XPath上下文节点的概念,在此继续讲述XPath表达式的上下文(Context)。XPath上下文有以下几个需要注意的概念。
(1) 发起XPath表达式求值的上下文节点(Context node)。
(2) XPath计算结果返回节点列表后,节点列表中节点的数目,称为上下文的大小(Context size)。
(3) 当在遍历XPath求值返回的节点列表时,遍历游标所到达的节点,称为当前节点(Current node)。
(4) 当前节点在上下文节点中的相对位置(Context position)。
XPath上下文看似复杂,实际上并不难。在考虑XPath计算结果时,要将注意力放到XML文档中的特定节点,然后考虑该节点和周围节点的关系。
在多个定位步骤中,求值上下文节点随着定位步骤变化,上下文大小为上下文节点XPath匹配选出节点的数量。可分别用“last()”和“position()”函数计算XPath上下文大小以及当前节点在上下文中的位置。
三、 定位步骤由轴、节点测试和谓项3部分组成
上述的“定位步骤”实际上可有3个部分组成,模式如下:
轴:节点测试[谓项]
XPath模式中的3个部分并不是都要求出现的。“轴”的部分往往被省略(默认为子节点轴),而“谓项”也不要求一定出现。例如:XPath“目录/文件”,实际上就是这种省略了“轴”和“谓项”的定位步骤(默认的节点轴是子节点轴“child::”)。
轴(Axis)表示从当前节点开始,向哪个方向开始匹配节点,XPath中的轴有13条,可分为层次关系轴和线性关系轴两大类,在轴名称的后面要附有“::”,与后续的“节点测试”部分隔开。
“节点测试”(Node-test)表示匹配轴方向的哪些节点。
“谓项”(Predicate)借用了逻辑学上的一些概念,意思是说条件成立的前提条件。谓项在XPath中起到在“轴”和“节点测试”的基础上,进一步筛选匹配节点的作用,在谓项中可以使用XPath函数和表达式筛选节点(如上文提到的表达式“position()=1”中,position()就是一个XPath函数)。
在执行XPath查询的每个定位步骤时,执行如下步骤。
(1) 从当前节点开始,面向轴方向,如节点轴为“先代节点轴”,则沿XML元素外围移动,如节点轴为“后继兄弟节点轴”,则向后继兄弟节点方向移动。
(2) 在轴方向上执行节点测试,确定轴方向上符合测试条件的所有节点的列表
(3) 以节点测试后所得列表中的每个节点为基准,用谓项的XPath求值表达式逐一筛选节点。如表达式有多个谓项(如“轴::节点测试[谓项1][谓项2]”),则用各谓项依次筛选节点。
(4) 如谓项返回结果可转换为逻辑真,则将该节点添加到XPath的查询结果列表中。
总之,节点轴以XPath定位步骤的当前节点为基准,节点测试以节点轴为基准,谓项筛选则以节点测试所得的节点为基准,即轴、节点测试、谓项三者中,每一项的计算均以前者为基础。
注意:节点轴和节点测试组合的XPath定位表达式必须返回节点列表,而谓项的XPath求值表达式可以返回值。谓项表达式的计算结果被转换成布尔类型,用于筛选节点测试返回的节点。
XPath的基本概念已经介绍完了,至于轴、节点测试以及谓项的详细资料,可以查看W3C的文档,http://www.w3.org/TR/xpath。
分享到:
相关推荐
官方离线安装包,亲测可用
离线安装包,亲测可用
- **XPath API**:用于在XML文档中定位元素和属性,提供了一种简洁的方式来查询XML数据。 - **XSLT API**:支持XML转换为其他格式,如HTML或PDF,基于XSLT(eXtensible Stylesheet Language Transformations)规范。...
在"JSTL-XML-Xpath"这个主题中,我们可以看到JSTL是如何集成XML处理和XPath查询的。JSTL的`<c:import>`和`<x:parse>`标签用于导入XML文档并将其解析为JDOM或DOM对象。接着,`<x:path>`标签可以用来执行XPath表达式,...
在本主题中,我们将深入探讨基于Xpath的XML文件查询和更新。 **Xpath基本概念** 1. **节点类型**:Xpath中的节点包括元素(element)、属性(attribute)、文本(text)、命名空间(namespace)、处理指令...
1、学习如何使用XMLSPY集成开发环境执行XPath查询、以及XSLT的数据转换。 2、理解XPath的类型系统和序列类型等相关概念,掌握XPath表达式语法和执行语义,能够熟练地、灵活地运用各种关系轴、判定谓词和XPath基本...
这个库将XPath查询功能与Python的DOM接口相结合,使得在Python中处理XML文档变得更加简单。 **版本信息** 在文件名 "py_dom_xpath_six-0.2.4-py3-none-any.whl" 中,我们可以看到几个关键组成部分: - `0.2.4` 是...
然而,TinyXML本身并不直接支持XPath,所以要实现XPath表达式的选择,我们需要自己编写逻辑或者借助第三方库如tinyxpath。 对于C语言,由于标准库中没有内置的XML处理工具,实现XPath通常需要外部库。文件`get_...
LibXML实现了XPath 1.0规范,允许用户通过表达式查询XML结构。 3. **XSLT支持**:XSLT(eXtensible Stylesheet Language Transformations)用于转换XML文档。LibXML包含了XSLT处理器,可以将XML文档转换成其他格式...
3. XMLDOM(XML文档对象模型):XMLDOM是XML文档的一种编程接口,它允许程序员通过JavaScript或其他支持的语言来创建、修改和查询XML文档。XMLDOM提供了遍历、查找、添加、删除XML节点的方法,使得在网页中动态操作...
本压缩包文件"xpath-helper.crx"很可能是一个Chrome浏览器的扩展程序,旨在提供实时的XPath查询支持。 XPath(XML Path Language)是一种在XML文档中查找信息的语言,它允许我们通过路径表达式来选取节点,如元素、...
BIT-101 XPath Query Tool XML查询工具
XMLDOM(XML Document Object Model)是微软开发的一种用于处理XML文档的API,它允许程序员通过JavaScript或其他编程语言在客户端或服务器端对XML数据进行读取、修改和操作。XMLDOM将XML文档转换为一个可遍历的对象...
这篇文档将围绕着标题中提到的六个关键技术领域——CSS(层叠样式表)、DHTML(动态超文本标记语言)、XMLDOM(XML文档对象模型)、T-SQL(Transact-SQL)、XPath(XML路径语言)以及正则表达式,展开详细的阐述。...
XPath是XML文档中查找信息的语言,它允许我们高效地定位到XML文档中的特定节点,如元素、属性或文本。在Java编程中,JDOM库是一个流行的解析和操作XML的工具,它提供了对XPath的支持,使得我们可以方便地通过XPath...
在Java编程环境中,XPath是一种强大的查询语言,用于在XML文档中查找信息。它允许我们根据节点的名称、属性、值或其他特性来定位XML文档中的特定部分。本篇将深入探讨如何在Java中利用XPath来提取XML文档中的数据,...
用户可以通过安装CRX文件(即`xpath-helper.crx`)来添加这个插件。XPath(XML Path Language)是一种在XML文档中查找信息的语言,它能够有效地选取XML或HTML文档中的节点,如元素、属性、文本等。 XPath Helper的...
3. **XML导航**:VTD-XML提供了一组API来实现XML文档的导航,如`AutoPilot`类,它允许用户通过XPath表达式或编程方式遍历XML结构。这使得开发者能够在不完全解析XML文档的情况下,对特定部分进行操作。 4. **XML...
Perl-XML-LibXML-Common 模块是基于LibXML库的,这是一个高性能的C语言实现的XML解析器,它提供了对XML标准的完整支持,包括XPath、XInclude、XML Schema和 Relax NG验证等特性。 Perl-XML-LibXML-Common 的主要...