Xpath的基本使用方法

  • 基础
    • 实例 '//div[@id="example1"/input[@class="color:red"]'
    • 斜线”/”是从根节点选择,双斜线”//”从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置,点”.”选取当前节点,两点”..”选取当前节点的父节点,“@”为选取属性。
      • 1、斜线/从根节点选择,基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径,获取满足该路径的所有节点:
        • 选择根元素   语法:/AAA
        • 选择AAA的所有CCC子元素  语法:/AAA/CCC
      • 2、如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系),//会做全文档扫描。
        • 选择所有BBB元素  语法://BBB
        • 选择所有父元素是DDD的BBB元素  语法://DDD/BBB
        • 选择AAA的CCC的所有BBB元素  语法:/AAA/CCC//BBB
      • 3、点“.” 选取当前节点。
      • 4、“..”选取当前节点的父节点。
      • 5、”@”选取属性。
        • 选择所有的id属性  语法://@id     注意:这里选取的是属性而不是方法。
        • 选择有id属性的BBB元素   语法://BBB[@id]   区别于上面的属性选择
        • 选择id属性为“b1”的BBB元素  语法://BBB[@id="b1"]
        • 选择有任意属性的BBB元素 语法://BBB[@*]
        • 选择不具有任何属性的BBB元素  语法://BBB[not(@*)]
    • 谓语在XPath是重要的一部分,谓语用来查找某个特定的节点或者包含某个指定的值的节点。谓语被嵌在方括号中。[谓语]
      • 1、选择AAA下的第一个BBB元素  语法:/AAA/BBB[1]
      •  2、选择AAA下的最后一个BBB元素  语法:/AAA/BBB[last()]
      • 3、选择AAA下的倒数第二个BBB元素  语法:/AAA/BBB[last()-1]
      • 4、选择AAA下的前面两个BBB元素  语法:/AAA/BBB[position()<3]
      •  5、获取AAA下的BBB下的有s属性的CCC元素   语法:/AAA/BBB/CCC[@s]
      • 6、选取所有 bookstore 元素的 book 元素,且其中的 price 元素的值须大于 35.00。 语法:/bookstore/book[price>35.00]
      • 7、选取所有 bookstore 元素中的 book 元素的 title 元素,且其中的 price 元素的值须大于 35.00.  语法:/bookstore/book[price>35.00]/title
    • 选择未知的XML元素和选择若干路径。 *
      • 1、星号 * 表示选择所有由星号之前的路径所定位的元素,*是通配符,表示该路径下的所有元素,也表示层次。
        • 选择所有路径依附于/AAA/CCC/DDD的元素  语法:/AAA/CCC/DDD/*
        • 选择所有的有3个祖先元素的BBB元素,即在第四层的BBB元素  语法:/*/*/*/BBB
        • 选择所有元素  语法://*
      • 2、“@*”匹配任何属性的节点,not(@*)匹配没有任何属性的节点。
      •  3、“|”是多个路径选择的并集,可以利用“|”查找符合多个条件的节点。
        • 获取所有的BBB元素和EEE元素  语法://BBB|//EEE
        • 获取AAA下XXX下的DDD的BBB元素和EEE元素  语法:/AAA/XXX/DDD/BBB|/AAA/XXX/DDD/EEE
  • 轴(类比族谱树结构)
    • XPath轴(XPath Axes)可定义某个相对于当前节点的节点集:
      • 1、child  选取当前节点的所有子元素
        • child是Xpath默认的轴,可以省略不写。下面看些简单例子:
        • /child::AAA  等价于/AAA
      • 2、parent  选取当前节点的父节点
        • parent轴是选取当前节点父节点,下面看简单示例:
        • //DDD/parent::*     获取所有节点DDD的父节点
        •  /AAA/BBB/parent::*    得到根节点AAA,这样写在实际中没有意义。
        • /AAA/parent::*     根节点无法获取到parent
      • 3、descendant 选取当前节点的所有后代元素(子、孙等)
        •  descendant选取当前节点的所有后代元素(包括子节点、子孙节点…),descendant (后代)轴包含上下文节点的后代,一个后代是指子节点或者子节点的子节点等等。
        •  /descendant::*   选择文档根元素的所有后代.即所有的元素被选择
        •  /AAA/BBB/descendant::*  选择/AAA/BBB的所有后代元素
        •  //CCC/descendant::*  选择所有CCC元素的所有后代元素
        • //CCC/descendant::DDD  择所有以CCC为祖先元素的DDD元素
      • 4、ancestor  选取当前节点的所有先辈(父、祖父等)
        • ancestor轴(axis)包含上下节点的祖先节点, 该祖先节点由其上下文节点的父节点以及父节点的父节点等等诸如此类的节点构成,所以ancestor轴总是包含有根节点,除非上下文节点就是根节点本身.
        • /AAA/BBB/DDD/CCC/EEE/ancestor::*  选择一个绝对路径上的所有节点
        •  //FFF/ancestor::*    选择FFF元素的所有祖先节点
      • 5、descendant-or-self  选取当前节点的所有后代元素(子、孙等)以及当前节点本身
        • descendant-or-self跟descendant类似,多了节点本身。
        •  /AAA/BBB/descendant-or-self::*    选择/AAA/BBB本身及所有后代元素
        •  //CCC/descendant-or-self::*    选择CCC的所有后代元素及本身
      • 6、ancestor-or-self  选取当前节点的所有先辈(父、祖父等)以及当前节点本身
        • ancestor-or-self跟ancestor类似,多了本身节点,选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
        • /AAA/BBB/DDD/CCC/EEE/ancestor-or-self::*   选择/AAA/BBB/DDD/CCC/EEE的先辈及本身
        • //FFF/ancestor-or-self::*   选择FFF元素的所有先辈以及FFF本身
      • 7、preceding-sibling 选取当前节点之前的所有同级节点(前面的)
        • preceding-sibling,选取当前节点之前的所有同级节点,同一个parent下该节点之前的节点,即“哥哥”节点(是同父的哥哥节点)。
        • /AAA/XXX/preceding-sibling::*    /AAA/XXX节点的所有之前同级节点
        • //CCC/preceding-sibling::*   选取所有CCC节点的同级哥哥节点
      • 8、following-sibling 选取当前节点之后的所有同级节点(后面的)
        • following-sibling 选取当前节点之后的所有同级节点,跟preceding-sibling一样都是选取同级同父的节点,只不过following是取对应节点之后的节点,preceding-sibling取的是该节点之前的节点。
        • /AAA/BBB/following-sibling::*    取/AAA/BBB节点的之后的所有同级节点
        •  //CCC/following-sibling::*    选取所有CCC元素的之后所有同级节点
      • 9、preceding   选取当前节点的开始标签之前的所有节点
        •  preceding选取文档中当前节点的开始标签之前的所有节点,包含同一文档中按文档顺序位于上下文节点之前的所有节点,除了祖先节点。
        • /AAA/XXX/preceding::*   选取/AAA/XXX节点所有之前节点(除其祖先外)
        •  //FFF/preceding::*  选取所有FFF节点的所有之前节点(除祖先外),在下面的例子中,选取的结果跟/AAA/XXX/DDD/FFF/preceding::*一样
      • 10、following   选取当前节点的结束标签之后的所有节点
        •  following选取文档中当前节点的结束标签之后的所有节点,包含同一文档中按文档顺序位于上下文节点之前的所有节点,除了祖先节点。 following选取文档中当前节点的结束标签之后的所有节点跟preceding的范围一样,只是方向不同,following是向后选取,preceding是向前选取。
        • /AAA/BBB/following::*     选取/AAA/BBB节点后的所有节点
        •  //ZZZ/following::*   选取所有ZZZ节点之后的节点
      • 11、self  选取当前节点
        • self选取当前节点,单独使用没有什么意思,主要是跟其他轴一起使用,如ancestor-or-self,descendant-or-self.
      • 12、attribute  选取当前节点的所有属性
        • attribute轴选取当前节点的所有属性,获取的结果是属性而不是节点,前面所有的轴都是选取节点。
        •  /AAA/BBB/attribute::*     选取/AAA/BBB节点的所有属性
        •  //CCC/attribute::*   选取所有CCC节点的所有属性
      • 13、namespace 选取当前节点的所有命名空间节点
        • 名称空间轴用来选取名称空间结点。每个元素结点都有一个专门名称空间结点表示每个作用域名称空间。
  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值