文章目录
http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html
取出没有任何属性的某标签
使用一个谓语(predicate)来检查元素是否有属性。在 XPath 的谓语中,使用 not() 函数和 @* 选择器可以实现这一点。@* 表示选择所有属性,而 not() 函数会检查给定的条件是否不成立。
//p[not(@*)]
选择某个标签的某个属性值为某个值
.//td[contains(@data-source, 'sanity')
[contains(@data-source, ‘sanity’)]:这是一个谓语(predicate),用于进一步限制所选择的 td 元素。它的作用是:
- @data-source:选择名为 data-source 的属性。
- contains():这是一个函数,用于检查第一个参数(在这种情况下是 @data-source
属性的值)是否包含第二个参数(在这种情况下是字符串 ‘sanity’)。
选择当前上下文节点下所有 td 元素,这些 td 元素必须有一个 data-source 属性,且该属性的值包含子串 ‘sanity’。
删除前部和尾部的空格, 并且把连续的空格串替换为一个单一的空格
<AAA>
<BBB id = "b1"/>
<BBB name = " bbb "/>
<BBB name = "bbb"/>
</AAA>
//BBB[normalize-space(@name)='bbb']
选择所有名为 BBB 的元素,这些元素的 name 属性值在经过空白处理后等于 ‘bbb’。例如,如果 name 属性的值是 ’ bbb '(前后有空格),或者 'bbb '(后面有多个空格),这些 BBB 元素将会被选中,因为 normalize-space() 函数会将这些值处理成 ‘bbb’。
选取某个节点的父节点
//div/parent::*
parent轴(axis)包含上下文节点的父节点, 如果有父节点的话
选取某个节点所有兄弟节点
//div/following-sibling::*
following-sibling轴(axis)包含上下文节点之后的所有兄弟节点
选取某节点之前的所有兄弟节点
//div/preceding-sibling::*
preceding-sibling 轴(axis)包含上下文节点之前的所有兄弟节点
选取某节点上下节点的祖先节点
//h2/ancestor::*
ancestor轴(axis)包含上下节点的祖先节点, 该祖先节点由其上下文节点的父节点以及父节点的父节点等等诸如此类的节点构成,所以ancestor轴总是包含有根节点,除非上下文节点就是根节点本身
什么是//
如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)
什么是[]
方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素.
/AAA/BBB[1]
/AAA/BBB[last()]
如何计数所选元素的个数
count()函数可以计数所选元素的个数
选择含有2个BBB子元素的元素
//*[count(BBB)=2]
选择含有3个子元素的元素
//*[count(*)=3]
如何获取元素名称
name()函数返回元素的名称, start-with()函数在该函数的第一个参数字符串是以第二个参数字符开始的情况返回true, contains()函数当其第一个字符串参数包含有第二个字符串参数时返回true.
选择所有名称以"B"起始的元素
//*[starts-with(name(),'B')]
选择所有名称为BBB的元素(这里等价于//BBB)
//*[name()='BBB']
选择所有名称包含"C"的元素
//*[contains(name(),'C')]