实例 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>

XPath 元素及属性查找的更多相关文章

  1. [Jmeter]Xpath获取元素某个属性的值,以及获取最后一个元素某个属性的值

    XPath获取元素某个属性的值 XPath query:  clients/attribute::total XPath获取最后一个元素某个属性的值 XPath query:   /clients/c ...

  2. XML 树结构,语法规则,元素,属性,验证及其解析

    XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶". 一个 XML 文档实例 XML 文档使用简单的具有自我描述性的语法: <?xml v ...

  3. xpath元素定位方法

    XPath 使用路径表达式来选取 XML 文档中的节点或者节点集.这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似.XPath 含有超过 100 个内建的函数.这些函数用于字符串值.数值 ...

  4. css选择器用法,使用css定位元素,css和xpath元素定位的区别

    css定位元素 1.什么是css? CSS(Cascading Style Sheets)层叠样式表,是一种语言,用来描述html或者xml的显示样式.在css语言中有css选择器,在selenium ...

  5. KatalonRecorder系列(一):基本使用+XPath元素定位

    一.简介 Katalon Recorder是基于selenium的浏览器插件,支持火狐和chrome.可以录制web上的操作并回放,还能导入导出脚本. 二.安装 可在谷歌商店或者火狐附件组件中搜索并选 ...

  6. Appium学习实践(二)Python简单脚本以及元素的属性设置

    1.简单的Python脚本 Appium中的设置与Appium学习实践(一)简易运行Appium中的一致 Launch后,执行脚本 #coding:utf-8 import unittest impo ...

  7. dom4j修改,获取,增加xml中某个元素的属性值

    XML文件: <?xml version="1.0" encoding="UTF-8"?> <vrvscript> <item I ...

  8. 元素的属性:client系列,scroll系列,offset系

    元素的属性 div.attributes 是所有标签属性构成的数组集合 dir.classList 是所有class名构成的数组集合 在classList的原型链上看一看到从 add()和remove ...

  9. BeautifulSoup 使用select方法详解(通过标签名,类名, id,组合,属性查找)

    import requestsfrom bs4 import BeautifulSoup blslib="html5lib"user_agent="Mozilla/5.0 ...

随机推荐

  1. logistic regression的一些问题,不平衡数据,时间序列,求解惑

    Logistic Regression 1.在有时间序列的特征数据中,怎么运用LR? 不光是LR,其他的模型也是. 有很多基本的模型变形之后,变成带时序的模型.但,个人觉得,这类模型大多不靠谱. 我觉 ...

  2. PostgreSQL Replication之第十二章 与Postgres-XC一起工作(5)

    12.5 创建表和发送查询 介绍了Postgres-XC以及其底层的思想之后,是时候创建我们的第一个表,看看集群将如何表现.下面的例子演示了一个简单的表.将使用id列的哈希键来分布它: test=# ...

  3. Lintcode: Segment Tree Modify

    For a Maximum Segment Tree, which each node has an extra value max to store the maximum value in thi ...

  4. 无序数组的中位数(set+deque)hdu5249

    KPI Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  5. Python学习总结3:元组、列表的操作汇总

    参考博客:http://www.cnblogs.com/QG-whz/p/4782809.html 1. 是否可变 元组:用()或tuple函数定义,不可变(元素的值以及整个元组): 列表:用 [] ...

  6. PHP中的赋值运算符

    PHP的赋值运算符有两种,分别是: (1)“=”:把右边表达式的值赋给左边的运算数.它将右边表达式值复制一份,交给左边的运算数.换而言之,首先给左边的运算数申请了一块内存,然后把复制的值放到这个内存中 ...

  7. java中时间的比较

    进入要比较从库中取出的时间,期初使用比较date.getTime()的值,但是当时间的年月日都相同时,时分秒较早的getTime()值比时分秒较晚的getTime()的值要大,至今笔者还不知这是为什么 ...

  8. struts_19_对Action中所有方法、某一个方法进行输入校验(手工编写代码实现输入校验)

    对所有方法进行校验1.通过手工编写代码的形式实现 需求:用户名:不能为空手机号:不能为空,并且要符合手机号的格式1,3/5/8,后面是9个数字 第01步:导包 第02步:配置web.xml <? ...

  9. 关于Linux系统basename函数缺陷的思考

    某模块作为前台进程独立运行时,运行命令携带命令行参数:作为某平台下守护进程子进程运行时,需要将命令行参数固化在代码里.类似如下写法: char *argv[] = {"./DslDriver ...

  10. requireJs和r.js压缩工具

    上面release是执行命令 node r.js -o build.js 生成的,需要切换到目录require/tools下面,也就是 有r.js和build.js的目录,才能执行命令 代码目录如上: ...