我是靠谱客的博主 长情小霸王,最近开发中收集的这篇文章主要介绍XPath语法要点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是XPath

XML Path Language   

访问xml中任意位置的一种语法,实际上是一种对于xml文档位置(路径)的描述,与文件系统的路径表达相似
XML是一种层次结构的文档,有一个根元素。构成要素是节点和节点的属性,各个节点之间由嵌套形成parent-child关系

主要层次
/root                            根节点
currentNode/child          当前节点的子节点
//someNode                  任意一个名为someNode的节点

区分同一节点的不同子节点
//someNode/child[1]
//someNode/child[2]
//someNode/child[last()]            last()  求出所有子节点的总数
//someNode/child[last()-1]         倒数第二个节点

常用的节点选取
//catalog/*/price      选取所有catalog元素的子元素,且这些子元素包含price子元素
/*/*/price                选取所有名为price且有两层父节点的元素
//catalog/cd[price]    选取所有含有price元素的cd元素

节点定位
节点定位可以通过绝对位置(绝对路径)和相对于其他节点的位置来确定
XML文档的结构属于一种树形结构,因此节点之间的位置关系也可以用树结构中的父子节点、兄弟节点、前驱、后继来描述
轴(axis/axe)用于定义相对于当前节点位置的节点集
轴名称 结果
self 选取当前节点。
parent 选取当前节点的父节点。
ancestor 选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
descendant 选取当前节点的所有后代元素(子、孙等)。
descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
preceding 选取文档中当前节点的开始标签之前的所有节点。
following 选取文档中当前节点的结束标签之后的所有节点。
preceding-sibling 选取当前节点之前的所有同级节点。
following-sibling 选取当前节点之后的所有同级节点。
attribute 选取当前节点的所有属性。
namespace 选取当前节点的所有命名空间节点。

//someNode/following-sibling::*         节点someNode之后的所有同级节点                   
//someNode/following-sibling::someSib         节点someNode之名为someSib的节点        
//someNode/following-sibling::*[2]         节点someNode之后的第2个同级节点
//someNode/following-sibling::*[2]//input         节点someNode之后的第2个同级节点的input子节点

引申--XPath一般位置表示
/step1/step2/...              绝对路径的位置表达
step1/step2/...               
绝对路径的位置表达
//step1/step2/...            相
对路径的位置表达
  
每个step(步)如下表示
  轴名称::节点测试[谓语]
其中,轴名称即上述轴位置表达式
          节点测试(node-test)指对轴内部节点的识别
          谓语是用来查找某个特定的节点(满足某些属性、值要求的节点)的表达式,如/bookstore/book[price>35.00],//title[@lang='eng']


操作属性
@someAttribute='peter'
@后面即是属性
//chapter[@num]        选出所有有属性num的chapter节点
//chapter[normalize-space(@num)="3"]              
normalize-space去除字符串头尾的空格
   

通配符* 和 not 运算
/library/book/chapter/*                /library/book/chapter 的所有子节点
//book/*                                    所有book节点的子节点
//*                                            所有的节点
/*/*/*/paragraph                       名为paragraph且有3层父节点的节点

//chapter[@*]                     所有带有任意属性的chapter节点   (属性个数不小于1)
//chapter[not(@num)]        选出所有不含属性num的chapter节点

算术/关系运算
+
div(除法) 
mod(取余)
=
!=            
等于和不等于,如果后面比较的对象的一组节点值,那么只有有一个(any)符合条件,即为真。

数值运算
<
>
<=
>=

逻辑运算
and
or
not()

库函数
count()    从0开始计数         //chapter[count(section)=1]         只包括2个section子节点的chapter
name()
starts-with(arg1, arg2)    判断arg1的开始部分等不等于arg2
contains(arg1, arg2)        判断arg1包不包含arg2

其他细节方面的补充参见   http://www.w3school.com.cn/xpath/index.asp
  

最后

以上就是长情小霸王为你收集整理的XPath语法要点的全部内容,希望文章能够帮你解决XPath语法要点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部