XPath 进阶:掌握高级选择器与路径表达式

在前面的文章中,我们了解了 XPath 的基本概念和语法。现在,我们将深入探讨 XPath 的高级选择器和路径表达式,以便更高效地查询 XML 数据。

高级选择器

位置选择器

XPath 提供了一些位置选择器,可以帮助我们选择特定位置的节点:

  • position():返回符合当前节点在节点的所有位置,是一个数组,可以对数组进行操作。

  • last():返回节点集中的最后一个节点。

  • 选择最后一个scirpt标签内容:

xpath 复制代码
//script[last()]

过滤选择器

使用方括号 [] 可以对节点进行过滤。例如,百度贴吧回帖数大于600的:

xpath 复制代码
//em[@data-num>600]

复杂路径表达式

XPath 允许我们使用复杂的路径表达式来精确定位节点。以下是一些示例:

xml 复制代码
<bookstore>
  <category name="前端开发">
    <book id="101">
      <title>JavaScript高级程序设计</title>
      <price>89.00</price>
      <stock>15</stock>
    </book>
    <book id="102">
      <title>CSS权威指南</title>
      <price>79.00</price>
      <stock>8</stock>
    </book>
  </category>
  
  <category name="后端开发">
    <book id="201">
      <title>Node.js实战</title>
      <price>69.00</price>
      <stock>12</stock>
    </book>
    <book id="202">
      <title>Python核心编程</title>
      <price>99.00</price>
      <stock>5</stock>
      <discount>0.8</discount>
    </book>
    <book id="203">
      <title>Java并发编程实战</title>
      <price>109.00</price>
      <stock>0</stock>
    </book>
  </category>
</bookstore>
  • 选择所有书籍的标题:
xpath 复制代码
//book/title
  • 选择所有价格大于 20 的书籍的标题:
xpath 复制代码
//book[price > 70]/title
  • 选择所有书籍中作者为 "王五" 的书籍:
xpath 复制代码
//book[author='王五']

使用 XPath 函数提升查询能力:从基础到复杂

XPath 提供了多种内置函数,可以帮助我们进行更复杂的查询。

常用函数

字符串函数

  • contains(string, substring):检查字符串是否包含子字符串。
  • starts-with(string, substring):检查字符串是否以特定子字符串开头。
  • substring(string, start, length):返回字符串的子串。

例如,选择所有标题中包含 "Java" 的书籍:

xpath 复制代码
//book[contains(title, 'Java')]

数学函数

  • sum(node-set):返回节点集的总和。
  • count(node-set):返回节点集中的节点数量。

选择所有书籍的总价格:

xpath 复制代码
sum(//book/price)

XPath 条件表达式与逻辑运算符的应用

XPath 支持条件表达式和逻辑运算符,使得查询更加灵活。

条件表达式

可以使用条件表达式来筛选节点。例如,选择价格在 10 到 30 之间的书籍:

xpath 复制代码
//book[price >= 70 and price <= 100]

逻辑运算符

XPath 支持 andornot() 运算符。例如,选择所有作者为 "John" 或 "Jane" 的书籍:

xpath 复制代码
//book[price=89 or price=109]

小结

如果你喜欢本教程,记得点赞+收藏!关注我获取更多JavaScript开发干货。

相关推荐
用户811358188120几秒前
React全家桶笔记(二):React组件核心 — State、Props、Refs
前端
Jenlybein几秒前
一文了解 pnpm,并快速上手操作!
前端·javascript·npm
大萝卜呼呼3 分钟前
Next.js第二课 - 项目结构详解 - 优栈
前端·next.js
skywalkzf4 分钟前
全志 V853 开发:lunch 不显示项目列表问题排查与解决
前端·chrome
踩着两条虫4 分钟前
VTJ.PRO 在线应用开发平台的项目模板(Web、H5、UniApp)
前端·低代码·ai编程
云原生指北4 分钟前
测试文章标题 - Omnipub 自动发布测试
前端
无责任此方_修行中5 分钟前
"JavaScript"这个名字,到底属于谁?一场价值74亿美元的法律战争
前端·javascript·程序员
CharlesY5 分钟前
网页排版与编码的隐形神器:HTML字符实体从入门到精通
前端
laamfun9 分钟前
VanityH – 面向前端渲染函数的优雅 Hyperscript DSL
javascript
我命由我123459 分钟前
React - useEffect、useRef、Fragment
开发语言·前端·javascript·react.js·前端框架·ecmascript·js