Tingting Dong

Tingting Dong

QA,抠脚女汉子,热爱一切美好事物的2货处女座...

LinkedIn

xpath实用的小结

概念

//  从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.   选取当前节点。
@   选取属性。
*   匹配任何元素节点。
@*  匹配任何属性节点。
node()  匹配任何类型的节点。  
|   选取若干路径
ancestor    选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self    选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute   选取当前节点的所有属性。
child   选取当前节点的所有子元素。
descendant  选取当前节点的所有后代元素(子、孙等)。
descendant-or-self  选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following   选取文档中当前节点的结束标签之后的所有节点。
following-sibling   选取当前节点之后的所有同级节点。
namespace   选取当前节点的所有命名空间节点。
parent  选取当前节点的父节点。
preceding   选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling   选取当前节点之前的所有同级节点。
self    选取当前节点。

例子

//book/title | //book/price 选取 book 元素的所有 title 和 price 元素。
//title | //price   选取文档中的所有 title 和 price 元素。
//title[@lang]   选取<title>标签里的lang属性
child::book 选取所有属于当前节点的子元素的 book 节点。
attribute::lang 选取当前节点的 lang 属性。
child::*    选取当前节点的所有子元素。
attribute::*    选取当前节点的所有属性。
child::text()   选取当前节点的所有文本子节点。
child::node()   选取当前节点的所有子节点。
descendant::book    选取当前节点的所有 book 后代。
ancestor::book  选择当前节点的所有 book 先辈。
ancestor-or-self::book  选取当前节点的所有 book 先辈以及当前节点(如果此节点是 book 节点)
child::*/child::price   选取当前节点的所有 price 孙节点。
//h3[text()='"+sectionName+"']  text的用法
//h3[text()='ooo']/preceding-sibling::div   h3下面的text=ooo的节点的之前同级节点的div
//div[@id='id' and text()!='loading...']    and的用法
//a/div[text()='LOGIN' or text()= '\u767B\u5F55']   or的用法
//a[div[2][text()='Survey'] 第二个div
//preceding-sibling::td/input[@name='rplist']   
//*[starts-with(name(),'W')]    选择所有名称以"W"起始的元素 
//*[string-length(name()) < 2]  选择名字长度小于2的元素; 
//B[not(@*)]    选择没有属性的B元素 
//*[count(B)=2]     选择含有2个B子元素的元素 

关于包含

//*[contains(.,'Save as PDF')]  查找全文本是不是包含指定字符串
//a[contains(@href,'/logout')]  查找<a 开头的 属性href里面包含 /logout的节点
//label[span[normalize-space(text())='On']][contains(@class,'selected')]    span里面的text去掉前后空格后等于On, 并且class名包含selected
//div[@class='small_gadget'][not(contains(@style,'display: none;'))]    not contain的用法

其他一些常见的函数

http://www.w3school.com.cn/xpath/xpath_functions.asp



comments powered by