XPath语法要点

前端之家收集整理的这篇文章主要介绍了XPath语法要点前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

什么是XPath

XML Path Language

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

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

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

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

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

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

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

@H_403_11@

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

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

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

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

@H_403_11@
数值运算 @H_403_11@
< @H_403_11@
> @H_403_11@
<= @H_403_11@
>= @H_403_11@

@H_403_11@
逻辑运算 @H_403_11@
and @H_403_11@
or @H_403_11@
not() @H_403_11@

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

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

猜你在找的XML相关文章