XPath语法简要

XPath是在XML文档中查找信息的语言,可对元素和属性进行遍历。

利用以下的XML内容。

<bookshop>
    <book>
        <name>Introduction to Algorithms</name>
        <author>Thomas H. Cormen, etc.</author>
        <price>68.00</price>
    </book>
    <book>
        <name>Deep Learning</name>
        <author>Ian Goodfellow, etc.</author>
        <price>610.00</price>
    </book>
</bookshop>

1.节点关系

父节点(parent):上一级节点,只有一个。book的父节点是bookshop。
子节点(child):下一级节点,可有一个,多个或零个。book的子节点有name,author,price。
兄弟同胞(sibling):有相同父节点的节点。name,author,price的父节点都是book,它们是兄弟同胞关系。
先辈(ancestor):节点的父节点,父节点的父节点,等等。name的先辈有book,bookshop。
后辈(descendant):节点的子节点,子节点的子节点,等等。bookshop的后辈有book,name,author,price。

2.节点选取

表达式说明例子例子的结果说明
nodename节点的所有子节点bookshopbookshop元素的所有子节点
/从根节点选取/bookshop
bookshop/book
根元素bookshop,由正斜杠(/)开始的代表着绝对路径
选取bookshop的所有book子元素
//从匹配选择的当前节点选择文档中的节点,不考虑位置//book
bookshop//book
选取所有book的子元素,不管在文档中的什么位置
选择bookshop后代的所有book元素,不管位于bookshop下的什么位置
.当前节点
..当前节点的父节点
@选取属性//@lang选取名为lang的所有属性
*匹配任何元素节点/bookshop/*
//*
bookshop元素的所有子元素
文档中的所有元素
@*匹配任何属性节点//name[@*]所有带有属性的name元素
node()匹配任何类型的节点

3.节点索引

例子例子的结果说明
/bookshop/book[1]bookshop的第一个book
/bookshop/book[last()]bookshop的倒数第一个book
/bookshop/book[last()-1]bookshop的倒数第二个book
/bookshop/book[position() < 3]bookshop的前两个book
/bookshop/book[price > 100.00]bookshop中的所有book,并且price的值大于100.00
/bookshop/book[price > 100.00]/namebookshop中的book的所有name,并且price的值大于100.00
//name[@lang]所有name元素,并且这些元素有lang属性
//name[@lang='eng']所有name元素,并且lang属性的值为eng
//book/name | //book/pricebook的所有name和price
//name | //price文档中的所有name和price
/bookshop/book/name | //pricebookshop的book的所有name,以及文档中的所有price

4.轴

轴名说明例子例子的结果说明
ancestor当前节点的所有先辈(父、祖父等)ancestor::book当前节点的所有 book 先辈
ancestor-or-self当前节点的所有先辈(父、祖父等)以及当前节点本身ancestor-or-self::book当前节点的所有 book 先辈以及当前节点(如果此节点是 book 节点)
attribute当前节点的所有属性attribute::lang
attribute::*
当前节点的 lang 属性
当前节点的所有属性
child当前节点的所有子元素child::book
child::*
child::text()
child::node()
child::price
当前节点的子元素的 book 节点
当前节点的所有子元素
当前节点的所有文本子节点
当前节点的所有子节点
当前节点的所有 price 孙节点
descendant当前节点的所有后代元素(子、孙等)descendant::book当前节点的所有 book 后代
descendant-or-self当前节点的所有后代元素(子、孙等)以及当前节点本身descendant-or-self::book当前节点的所有 book 后辈以及当前节点(如果此节点是 book 节点)
following文档中当前节点的结束标签之后的所有节点
namespace当前节点的所有命名空间节点
parent当前节点的父节点parent::book当前节点的父元素的 book 节点
preceding当前节点的开始标签之前的所有节点
preceding-sibling当前节点之前的所有同级节点
self当前节点

5.运算符

运算符说明例子例子的结果说明
|并集//book | //name所有book和name节点
+1+23
-4-31
*2*36
div4 div 22
=price=68.00price为68.00,返回真,否则返回假
!=不等price!=68.00price为68.00,返回假,否则返回真
<小于price<68.00price小于68.00,返回真,否则返回假
<=小于等于price<=68.00price小于等于68.00,返回真,否则返回假
>大于price>68.00price大于68.00,返回真,否则返回假
>=大于等于price>=68.00price大于等于68.00,返回真,否则返回假
orprice=68.00 or price=610.00price为68.00或610.00,返回真,否则返回假
andprice>68.00 and price < 610.00price为68.00与610.00之间,返回真,否则返回假
mod除法的余数5 mod 21

转载于:https://www.cnblogs.com/Ooman/p/11163512.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值