XPath是一门在XML文档中查找信息的语言。XPath可用来在XML文档中对元素和属性进行遍历。
XPath使用路径表达式在XML文档中进行导航;XPath包含一个标准函数库;XPath是XSLT中的主要元素;XPath是W3C标准。
在XPath中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。
节点(Node):XML文档是作为节点树来对待的。树的根被称为文档节点或者根节点。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<bookstore> <!-- 文档节点 -->
<book>
<title lang="en'>Harry Potter</title>
<author>K. Rowling</author> <!-- 元素节点 -->
<year>2015</year>
<price>29.99</price>
</book>
</bookstore>
基本值(原子值):无父或无子的节点
项目:基本值或节点
XPath使用路径表达式来获取XML文档中的节点或节点集。节点是通过沿着路径或步来选取的。
路径表达式:
nodename 选取次节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
谓语(predicates):用来查找某个特定的节点或包含某个指定的值的节点,谓语被嵌在方括号中。
/bookstrore/book[1] 选取boostore子元素的第一个book元素
/bookstore/book[last()] 选取boostrore子元素的最后一个book元素
/bookstore/book[last()-1] 选取bookstore子元素的倒数第二个book元素
/bookstroe/book[position()<3] 选取最前面的两个属于bookstore元素的子元素的book元素
//title[@lang] 选取所有拥有名为lang的属性的title元素
//title[@lang="eng"] 选取所有title元素,且这些元素拥有eng的lang值
/bookstore/booke[price>35.00] 选取bookstrore元素所有book元素,且其中的price值须大于35
/bookestore/book[price>35]/title 选取bookestore元素中的book元素的所有title元素,且中的price值必须大于35
XPath可以使用通配符来选取未知的XML元素
* 匹配任何元素节点
@* 匹配任何属性节点
node() 匹配任何类型节点
/bookstore/* 选取bookstore元素的所有子元素
//* 选取文档中的所有元素
//title[@*] 选取所有属性的title元素
选取若干路径:通过在路径表达式中使用|运算符,可以选取若干路径
//book/title|//book/price 选取booke元素所有的title和price元素
//title|//price 选取文档中的所有title和price元素
/bookstore/book/title|//price 选取bookstroe元素的book元素中所有的title和price元素
XPath轴:相对于当前节点的节点集
ancestor 选取当前节点的所有先辈
ancestor-or-self 选取当前节点的所有父辈及当前节点本身
attribue 选取当前节点的所有属性值
child 选取当前节点的所有子元素
descendant 选取当前节点的所有后代元素
descendant-or-self 选取当前节点的所有后代元素以及当前节点本身
following 选取文档中当前节点的结束标签之后的所有节点
namespace 选取当前节点的所有命名空间节点
parent 选取当前节点的的父节点
preceding 选取文档中当前节点的开始标签之前的所有节点
preceding-sibling 选取当前节点之前的所有同级节点
self 选取当前节点
位置路径可以是绝对的,也可以是相对的。绝对路径起始于正斜杠/。
步(step)包括:
轴:定义所选节点域当前节点之间的树关系
节点测试:识别某个轴内部的节点
另个或多个谓语,更深入的提炼所选的节点集
chile:book 选取所有属于当前节点的子元素的book节点
atrribute::lang 选取当前节点的lang属性
child::* 选取当前节点的所有子元素
attribute::* 选取当前节点的所有属性
child::text() 选取当前节点的所有文本子节点
child::node() 选取当前节点的所有子节点
descendant::book 选取当前节点的所有book后代
ancestor::book 选取当前节点的所有book先辈
ancestor-or-self::book 选取当前节点的所有book先辈及当前节点
child::*/child::price 选取当前节点的所有price孙节点