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的xml文件查询,只要输入Xpath路径(全路径)就能返回目标节点信息,同时也支持数据的更新设置。
1、学习如何使用XMLSPY集成开发环境执行XPath查询、以及XSLT的数据转换。 2、理解XPath的类型系统和序列类型等相关概念,掌握XPath表达式语法和执行语义,能够熟练地、灵活地运用各种关系轴、判定谓词和XPath基本...
CSS、DHTML、XMLDOM、T-SQL、XPath、正则表达式等.chm文件
CSS、DHTML、XMLDOM、T-SQL、XPath、正则表达式等CHM格式学习文档
好不容找到的的CSS、DHTML、XMLDOM、T-SQL、XPath、正则表达式中文的帮助文档,而且带搜索功能很强大,找了很久才找到,值两个积分吧
BIT-101 XPath Query Tool XML查询工具
实用的JSTL想要的可以下载!!!解压就可以使用
从XML文件抽出XPath - C and C++ 两个版本。
xpath读取XML节点 用jdom包
之前找了好多感觉和自己的需求不太一样,这个可以根据Xpath解析出来xml里所有的信息,十分好用 举个例子 xmlPath = "E://upload/xml/1580242.163.xml"; XPathUtil util = XPathUtil.newInstance(xmlPath); Product ...
使用xpath读取xml中的数据
xPath.jar,XML解析包。XPath是获取xml中数据的一种方式,其简单语法易用。
XML查询总览xmlquery是用于XML文档的XPath查询包,允许您使用XPath表达式从XML文档中提取数据或评估。 xmlquery具有内置的查询对象缓存功能,可以缓存最近使用的XPATH查询字符串。 启用缓存可以避免为每个查询重新...
采用XPATH在线查询XML文件的搜索引擎源码
主要介绍了Python3 xml.etree.ElementTree支持的XPath语法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
xml+dom4j+xpath资料
Web爬网,XPath,XSLT 全名:魏云晨SEAS登录:yunchenw 您实现了哪些功能? MileStone2:完整要求爬网程序和Servlet不应同时作为两个进程启动。 启动服务器,运行搜寻器(基本上,在运行搜寻器之前添加用户和通道) ...