xpath 轴 运算符

Table of Contents

Xpath轴

  • child 选取当前节点的所有子元素
  • parent  选取当前节点的父节点
  • descendant 选取当前节点的所有后代元素(子、孙等)
  • ancestor  选取当前节点的所有先辈(父、祖父等)
  • descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身
  • ancestor-or-self  选取当前节点的所有先辈(父、祖父等)以及当前节点本身
  • preceding-sibling 选取当前节点之前的所有同级节点
  • following-sibling 选取当前节点之后的所有同级节点
  • preceding   选取文档中当前节点的开始标签之前的所有节点
  • following   选取文档中当前节点的结束标签之后的所有节点
  • self  选取当前节点
  • attribute  选取当前节点的所有属性
  • namespace 选取当前节点的所有命名空间节点

/AAA/XXX/preceding-sibling::* /AAA/XXX节点的所有之前同级节点

谓语

  • last() 选取最后一个元素 /bookstore/book[last()]
  • position()<3 选取最前面的两个属于 bookstore 元素的子元素的 book 元素
    /bookstore/book[position()<3]
  • price>35.00 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。 /bookstore/book[price>35.00]

运算符

https://www.w3school.com.cn/xpath/xpath_operators.asp

XPath、XQuery 以及 XSLT 函数

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

  • normalize-space 删除指定字符串的开头和结尾的空白,并把内部的所有空白序列替换为一个,然后返回结果。如果没有 string 参数,则处理当前节点。

一些示例

# 根据text获取指定的节点,对不需要的节点进行排除。
xpath('//span[@class="title-name"][contains(text(),"出品") and not (contains(text(),"联合出品"))]/ancestor::dl/dd//div[@class="p-item"][position()<4]//p/text()')

# 合并两个节点的值 (115.2,万 >>> 115.2万)
xpath('concat(//p[contains(text(),"话题讨论量")]/following-sibling::p//span[1]/text(),//p[contains(text(),"话题讨论量")]/following-sibling::p//span[2]/text())')

#猫眼历史最高热度值获取
xpath('//*[@class="tv-baseinfo"]//span[contains(text(),"热度值")]/ancestor::a//p[contains(text(),"历史最高")]/following-sibling::p/span/text()')

# 根据class属性含有的值进行查找
xpath('//div[contains(@class,"movie-item-title")]/a/text()')

# 去除空格 换行符
xpath('normalize-space(//div/a/text())')