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 节点。
相关推荐
金虹桥程序员几秒前
【动画】 📚 CSS 动画与 GPU 合成层优化全链路指南
前端·面试
程序员老赵4 分钟前
Docker 部署填鸭表单完整教程:搭建私有化问卷与表单收集平台
前端·docker·开源
重生之小比特10 分钟前
【Java SE】抽象类和接口
java·开发语言
Lyyaoo.13 分钟前
【设计模型】策略模式
java
无限压榨切图仔20 分钟前
向量库能搜到内容,为什么还不算学会 RAG
前端·agent
mmsx20 分钟前
MapLibre 实战 11|用户说"我的地块丢了":一个 sealed class 图层模型,和四个让我重构三版的坑
android·前端·开源
xqchen23 分钟前
代码差异可视化方案选型:diff2html 实战指南
前端
譕痕23 分钟前
Idea 集成 智能体开发工具“千问(qwen)”
java·ide·spring·语言模型
名字还没想好☜24 分钟前
用 Zustand 做 React 全局状态管理:告别 Context 重渲染,3 个实战模式与持久化
前端
用户81818706274629 分钟前
第27章 消息丢失/重复消费的全链路排查(生产者→Broker→消费者)
java·后端