XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。
XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。
练习地址,以下面地址为例:
http://www.w3school.com.cn/example/xmle/books.xml
1. 查找book对象
所有的书:
//book
第一本书:
//book[1]
倒数第一本:
//book[last()]
//表示从目录任意位置查找,/表示按照目录顺序查找
倒数第二本:
//book[last()-1]
2.属性查找@:
表示查找属性category为cooking的内容
//book[@category="cooking"]
1. 逻辑表达式
And查找
//book[@category="web" and @cover="paperback"]
Or查找
//book[@category="web" or @cover="paperback"]
非查找控件
//book[@category!="web"]
Not查找
//book[not(@category="children")]
//year[not(.=2005)]
意思是:查找year内容不为2005的内容 注:“.”就等于text()
模糊匹配
//book/title[contains(text(),'Potter')]
查看book下面title下文本内容包含Potter的控件,只要包含potter就可以定位
精确匹配
//book/year[(text()=2005)]
使用属性值做精确匹配 意思是:查找book下year节点下文本内容为2005的内容
使用大于小于符号定位
//book/year[(text()<2005)]
查找book下year下的文本内容小于2005的
相对定位:
相对定位是两个杠表示“//”,相对路径易维护,
//book//title
绝对路径
绝对定位用一个杠“/”, 绝对路径一个层级变化所有空间都有变化
/bookstore/book[1]/title
轴方式定位:
轴表达式说明
1、<skd>child::* :表示当前节点的子元素
2、parent::* :表示当前节点的父节点元素
3、descendant::*: 选取当前节点的所有后代元素(子、孙等)
4、ancestor::* :表示当前节点的祖先节点元素
5、descendant-or-self::* :表示当前节点的及它们的后代元素
6、ancestor-or-self::* :表示当前节点的及它的祖先节点元素
7、preceding-sibling::* :表示当前节点的前面所有兄弟节点元素
8、following-sibling::* :表示当前节点的后序所有兄弟节点元素
9、preceding::* :表示当前节点的所有元素
10、following::* :表示当前节点的后序所有元素
11、self::* :表示当前节点的自身元素
12、attribute::* :选取当前节点的所有属性
13、namespace::*: 选取当前节点的所有命名空间节点
14、/A/descendant::* :表示A的所有后代元素
1.同级元素
/bookstore/book[1]/following-sibling::*
查找books1所有的同级元素都查找出来,“*”表示所有
2.查找book[1]下同级节点下的第二个节点
/bookstore/book[1]/following-sibling::book[2]
查找子节点后的节点year
/bookstore/book[2]/year/following-sibling::*
意思是:查找books2下year节点后所有的节点
查找节点前的数据
/bookstore/book[2]/year/preceding-sibling::*
意思是:查找books[2]下year前的同级节点
查找节点的父辈
/bookstore/book[2]/year/parent::*
意思是:查找book[2]的上一个节点,父辈
查找节点的子辈
/bookstore/book[2]/descendant::*
意思是:查找book2的子辈
使用position位置定位
//book[position()=2]
意思:定位books下的第二个节点
也还可以这样
//book[position()>2]
问题:
//book[contains(.,'Potter')] 可以查找到内容
//book[contains(text(),'Potter')] 查找不到内容