当前位置: 首页 > news >正文

XPath 语法笔记

XPath 语法笔记

  • XPath 表达式
    • 1. 选择所有本地名称为特定名称的元素
    • 2. 选择具有特定属性的元素
    • 3. 选择属性值不等于特定值的元素
    • 4. 选择元素内容中包含特定字符串的节点
    • 5. 选择元素内容中不包含特定字符串的节点
    • 6. 选择特定命名空间内的元素
    • 7. 选择元素的属性
    • 8. 选择元素的所有属性
    • 9. 选择所有子孙元素
    • 10. 选择当前节点的父节点
    • 注意事项
  • 参考资料

XPath 表达式

1. 选择所有本地名称为特定名称的元素

  • 表达式: //*[local-name()='elementName']
  • 示例: 若要选择所有本地名称为sym的元素,可以使用.//*[local-name()='sym']

2. 选择具有特定属性的元素

  • 表达式: //*[local-name()='elementName' and @attributeName='value']
  • 示例: 若要选择所有本地名称为symw:font属性值为"Arial"的元素,可以使用.//*[local-name()='sym' and @w:font='Arial']

3. 选择属性值不等于特定值的元素

  • 表达式: //*[local-name()='elementName'][not(@attributeName='value')]
  • 示例: 若要选择所有本地名称为symw:font属性值不为"Arial"的元素,可以使用.//*[local-name()='sym'][not(@w:font='Arial')]

4. 选择元素内容中包含特定字符串的节点

  • 表达式: //*[contains(text(), 'string')]
  • 示例: 若要选择所有内容中包含单词example的段落,可以使用//p[contains(text(), 'example')]

5. 选择元素内容中不包含特定字符串的节点

  • 表达式: //*[not(contains(text(), 'string'))]
  • 示例: 若要选择所有内容中不包含单词example的段落,可以使用//p[not(contains(text(), 'example'))]

6. 选择特定命名空间内的元素

  • 表达式: //namespace:elementName
  • 示例: 若要选择http://schemas.openxmlformats.org/wordprocessingml/2006/main命名空间下的所有sym元素,可以使用//w:sym,其中w命名空间必须在XPath引擎中被正确声明。

7. 选择元素的属性

  • 表达式: //*[local-name()='elementName']/@attributeName
  • 示例: 若要选择所有sym元素的w:char属性,可以使用.//*[local-name()='sym']/@w:char

8. 选择元素的所有属性

  • 表达式: //*[local-name()='elementName']/@*
  • 示例: 若要选择所有sym元素的所有属性,可以使用.//*[local-name()='sym']/@*

9. 选择所有子孙元素

  • 表达式: //elementName
  • 示例: 若要选择文档中所有的p元素,无论它们处于哪个层级,可以使用//p

10. 选择当前节点的父节点

  • 表达式: ..
  • 示例: 如果当前节点是<p>...</p>,那么..将指向包含它的父节点。

注意事项

  • 当使用命名空间时,确保在XPath引擎中正确声明命名空间的前缀和URI。
  • .代表当前节点,..代表当前节点的父节点。
  • @*选择所有属性。
  • 使用local-name()函数时,XPath会忽略命名空间,只考虑元素的本地名称。

参考资料

XPath 1.0 规范: https://www.w3.org/TR/xpath/
XPath 2.0 规范: https://www.w3.org/TR/xpath-20/
XPath 3.1 规范: https://www.w3.org/TR/xpath-31/

菜鸟教程 XPath 参考手册 - 语法

相关文章:

  • DP:子序列问题
  • elasticsearch导出和导入数据
  • eNSP中WLAN的配置和使用
  • Linux文件描述符与FILE指针互相转换
  • 7月形势分析-您下一步该如何做,才能走出困境?
  • 零基础开始学习鸿蒙开发-读书app简单的设计与开发
  • 探索 Electron:将 Web 技术带入桌面应用
  • 【python报错】已解决 ERROR: Could not find a version that satisfies the requirement
  • JDK动态代理-AOP编程
  • el-config-provider在Vue3中自定义命名空间实现
  • 【笔记】Spring Cloud Gateway 实现 gRPC 代理
  • MM-LLM:使用Llava类构建图文多模态大模型实践
  • js中添加数组元素的方法
  • Go语言学习:每日一练2
  • EFCore_悲观锁与乐观锁(MySQL)
  • 30天自制操作系统-2
  • Android 架构优化~MVP 架构改造
  • angular2 简述
  • Docker下部署自己的LNMP工作环境
  • EventListener原理
  • export和import的用法总结
  • JavaScript服务器推送技术之 WebSocket
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Mysql5.6主从复制
  • Next.js之基础概念(二)
  • nodejs:开发并发布一个nodejs包
  • PaddlePaddle-GitHub的正确打开姿势
  • socket.io+express实现聊天室的思考(三)
  • vue:响应原理
  • Yii源码解读-服务定位器(Service Locator)
  • 今年的LC3大会没了?
  • 开发基于以太坊智能合约的DApp
  • 我的面试准备过程--容器(更新中)
  • ​虚拟化系列介绍(十)
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (1)(1.13) SiK无线电高级配置(五)
  • (1)STL算法之遍历容器
  • (11)MSP430F5529 定时器B
  • (2020)Java后端开发----(面试题和笔试题)
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (转载)从 Java 代码到 Java 堆
  • .NET gRPC 和RESTful简单对比
  • .Net mvc总结
  • .NET导入Excel数据
  • .NET框架设计—常被忽视的C#设计技巧
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [100天算法】-实现 strStr()(day 52)
  • [20171106]配置客户端连接注意.txt
  • [7] CUDA之常量内存与纹理内存
  • [Algorithm][动态规划][子序列问题][最长递增子序列][摆动序列]详细讲解
  • [Android]创建TabBar
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [C++] 从零实现一个ping服务
  • [C++核心编程](四):类和对象——封装