Xpath语法

XPath 是一种在 XML 和 HTML 文档中查找信息的语言,提供了丰富的表达式来选择节点和处理文档内容;

1. 基本选择器

  • /:从根节点选择。
    • /bookstore/book:选择 bookstore 下的所有 book 节点。
  • //:选择文档中的节点,不考虑它们的位置。
    • //book: 选择文档中的所有 book 节点。
  • .//:选择当前节点的所有子孙节点。
    • .//span:选择当前节点下的所有 span 元素。
  • .:选择当前节点。
  • ..:选择当前节点的父节点。

2. 节点选择

  • nodename:选择所有该名称的子节点。
    • book:选择所有名为 book 的子节点。
  • *: 选择所有节点。
    • bookstore/*:选择 bookstore 下的所有子节点。
  • @: 选择属性。
    • @lang:选择名为 lang 的属性。
  • @*: 选择所有属性。
    • book/@*:选择 book 节点的所有属性。

3. 谓语 (Predicates)

  • [index]:选择某个特定的节点(索引从 1 开始)。
    • //book[1]:选择第一个 book 节点。
  • [last()]:选择最后一个节点。
    • //book[last()]:选择最后一个 book 节点。
  • [position()]:选择特定位置的节点。
    • //book[position() < 3]:选择前两个 book 节点。
  • [condition]:根据条件选择节点。
    • //book[@lang='en']:选择属性 lang 为 en 的 book 节点。

4. 逻辑运算

  • and, or, not():逻辑运算符。
    • //book[@lang='en' and @category='web']:选择 lang 为 en 且 category 为 web 的 book 节点。

5. 文本选择

  • text():选择节点的文本内容。
    • //book/title/text():选择 book 节点下的 title 文本内容。
  • contains(): 检查包含关系。
    • //book[contains(@category, 'fiction')]:选择 category 包含 fiction 的 book 节点。
  • starts-with(): 检查开头。
    • //book[starts-with(@title, 'Harry')]: 选择标题以 Harry 开头的 book 节点。

6. 其他函数

  • count(): 计算节点数。
    • count(//book): 计算 book 节点的个数。
  • name(): 获取节点名称。
    • name(//book[1]): 获取第一个 book 节点的名称。
  • normalize-space(): 去除字符串前后的空白。
    • normalize-space(//book/title): 去除 title 文本前后的空白。

7. 轴选择 (Axes)

  • ancestor::: 选择当前节点的所有祖先节点。
    • ancestor::bookstore: 选择当前节点的所有 bookstore 祖先节点。
  • child::: 选择当前节点的所有子节点。
    • child::title: 选择当前节点的 title 子节点。
  • descendant::: 选择当前节点的所有子孙节点。
    • descendant::title: 选择当前节点的所有 title 子孙节点。
  • following-sibling::: 选择当前节点之后的所有兄弟节点。
    • following-sibling::book: 选择当前节点之后的所有 book 兄弟节点。
  • preceding-sibling::: 选择当前节点之前的所有兄弟节点。
    • preceding-sibling::book: 选择当前节点之前的所有 book 兄弟节点。

8. 组合

  • |: 组合多个路径。
    • //book | //magazine: 选择文档中所有的 book 和 magazine 节点。
相关推荐
kyriewen7 分钟前
AI 能把页面写出来,为什么改个需求就开始崩?
前端·javascript·人工智能
wang_shu_mo_ran27 分钟前
MyBatis 从入门到进阶(一)
java·spring·mybatis
涛涛ing1 小时前
2026年最值得关注的前端变化,藏在“默认值”里
前端
量化分析码农2 小时前
股票历史数据的复权参数对照:多级别返回的字段与数值差异
java·javascript·后端
猫猫不是喵喵.2 小时前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
瑞雪兆丰年兮2 小时前
JavaWeb-day13-SpringBootWeb事务管理&AOP
java·开发语言·springboot·javaweb·事务·web·aop
曲径海盗2 小时前
Try-Except怎么用,3个追问解答在自动化下的应用
java·jvm·oracle
亿元程序员3 小时前
太牛了!这AI做出来的游戏,居然还能变现!
前端
hellice3 小时前
闪传 FlashDrop 实战:我用 300 行 Node 代码做了个「4 位取件码」临时文件中转站
前端·产品
Cosolar3 小时前
极简智库:快速搭建你的开源项目教程阅读平台,让 docs/ 目录被更多人看见
java·架构·github