zoukankan      html  css  js  c++  java
  • XPath 元素及属性查找

    实例 1

    基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径

    /AAA
    选择根元素AAA

          <AAA>
               <BBB/>
               <CCC/>
               <BBB/>
               <BBB/>
               <DDD>
                    <BBB/>
               </DDD>
               <CCC/>
          </AAA>
    /AAA/CCC
    选择AAA的所有CCC子元素

          <AAA>
               <BBB/>
               <CCC/>
               <BBB/>
               <BBB/>
               <DDD>
                    <BBB/>
               </DDD>
               <CCC/>
          </AAA>
    /AAA/DDD/BBB
    选择AAA的子元素DDD的所有子元素

          <AAA>
               <BBB/>
               <CCC/>
               <BBB/>
               <BBB/>
               <DDD>
                    <BBB/>
               </DDD>
               <CCC/>
          </AAA>

    实例 2

    如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)

    //BBB
    选择所有BBB元素

          <AAA>
               <BBB/>
               <CCC/>
               <BBB/>
               <DDD>
                    <BBB/>
               </DDD>
               <CCC>
                    <DDD>
                         <BBB/>
                         <BBB/>
                    </DDD>
               </CCC>
          </AAA>
    //DDD/BBB
    选择所有父元素是DDD的BBB元素

          <AAA>
               <BBB/>
               <CCC/>
               <BBB/>
               <DDD>
                    <BBB/>
               </DDD>
               <CCC>
                    <DDD>
                         <BBB/>
                         <BBB/>
                    </DDD>
               </CCC>
          </AAA>

    实例 3

    星号 * 表示选择所有由星号之前的路径所定位的元素

    选择所有路径依附于/AAA/CCC/DDD的元素

          <AAA>
               <XXX>
                    <DDD>
                         <BBB/>
                         <BBB/>
                         <EEE/>
                         <FFF/>
                    </DDD>
               </XXX>
               <CCC>
                    <DDD>
                         <BBB/>
                         <BBB/>
                         <EEE/>
                         <FFF/>
                    </DDD>
               </CCC>
               <CCC>
                    <BBB>
                         <BBB>
                              <BBB/>
                         </BBB>
                    </BBB>
               </CCC>
          </AAA>
    */BBB
    选择所有的有3个祖先元素的BBB元素

          <AAA>
               <XXX>
                    <DDD>
                         <BBB/>
                         <BBB/>
                         <EEE/>
                         <FFF/>
                    </DDD>
               </XXX>
               <CCC>
                    <DDD>
                         <BBB/>
                         <BBB/>
                         <EEE/>
                         <FFF/>
                    </DDD>
               </CCC>
               <CCC>
                    <BBB>
                         <BBB>
                              <BBB/>
                         </BBB>
                    </BBB>
               </CCC>
          </AAA>
    //*
    选择所有元素

          <AAA>
               <XXX>
                    <DDD>
                         <BBB/>
                         <BBB/>
                         <EEE/>
                         <FFF/>
                    </DDD>
               </XXX>
               <CCC>
                    <DDD>
                         <BBB/>
                         <BBB/>
                         <EEE/>
                         <FFF/>
                    </DDD>
               </CCC>
               <CCC>
                    <BBB>
                         <BBB>
                              <BBB/>
                         </BBB>
                    </BBB>
               </CCC>
          </AAA>

    实例 4

    方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素.

    /AAA/BBB[1]
    选择AAA的第一个BBB子元素

          <AAA>
               <BBB/>
               <BBB/>
               <BBB/>
               <BBB/>
          </AAA>
    /AAA/BBB[last()]
    选择AAA的最后一个BBB子元素

          <AAA>
               <BBB/>
               <BBB/>
               <BBB/>
               <BBB/>
          </AAA>

    实例 5

    属性通过前缀 @ 来指定

    //@id
    选择所有的id属性

          <AAA>
               <BBB id = "b1"/>
               <BBB id = "b2"/>
               <BBB name = "bbb"/>
               <BBB/>
          </AAA>
    //BBB[@id]
    选择有id属性的BBB元素

          <AAA>
               <BBB id = "b1"/>
               <BBB id = "b2"/>
               <BBB name = "bbb"/>
               <BBB/>
          </AAA>
    //BBB[@name]
    选择有name属性的BBB元素

          <AAA>
               <BBB id = "b1"/>
               <BBB id = "b2"/>
               <BBB name = "bbb"/>
               <BBB/>
          </AAA>
    //BBB[@*]
    选择有任意属性的BBB元素

          <AAA>
               <BBB id = "b1"/>
               <BBB id = "b2"/>
               <BBB name = "bbb"/>
               <BBB/>
          </AAA>
    //BBB[not(@*)]
    选择没有属性的BBB元素

          <AAA>
               <BBB id = "b1"/>
               <BBB id = "b2"/>
               <BBB name = "bbb"/>
               <BBB/>
          </AAA>

    实例 6

    属性的值可以被用来作为选择的准则, normalize-space函数删除了前部和尾部的空格, 并且把连续的空格串替换为一个单一的空格
    //BBB[@id='b1']
    选择含有属性id且其值为'b1'的BBB元素

          <AAA>
               <BBB id = "b1"/>
               <BBB name = " bbb "/>
               <BBB name = "bbb"/>
          </AAA>
    //BBB[@name='bbb']
    选择含有属性name且其值为'bbb'的BBB元素

          <AAA>
               <BBB id = "b1"/>
               <BBB name = " bbb "/>
               <BBB name = "bbb"/>
          </AAA>
    //BBB[normalize-space(@name)='bbb']
    选择含有属性name且其值(在用normalize-space函数去掉前后空格后)为'bbb'的BBB元素

          <AAA>
               <BBB id = "b1"/>
               <BBB name = " bbb "/>
               <BBB name = "bbb"/>
          </AAA>
  • 相关阅读:
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第50章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第49章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第48章 读书笔记(待更新)
    Spring Boot 中使用 Quartz 实现任务调度
    实战 FastDFS Java 客户端上传文件
    分布式文件系统之 FastDFS
    Java 持久层框架之 MyBatis
    C语言实现贪吃蛇
    [转载]分享三篇非常好的学习心得
    selenium加载cookie报错问题:selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain
  • 原文地址:https://www.cnblogs.com/odoo/p/4386694.html
Copyright © 2011-2022 走看看