XPath 语法笔记

XPath 语法笔记

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

XPath 表达式

  • 当使用命名空间时,确保在XPath引擎中正确声明命名空间的前缀和URI。
表达式说明
nodename选择 nodename 节点的所有子节点
/单斜杠表示绝对路径。它总是从XML文档的根节点开始
//双斜杠表示任意深度的后代路径
.代表当前节点
..代表当前节点的父节点
*匹配任意节点
//*当前文档的所有元素(任意深度 + 任意节点)
@*选择所有属性。 放在[@*]中,表示带任何属性
local-name()使用此函数时,XPath会忽略命名空间,只考虑元素的本地名称
[]谓语(Predicates)[]用于填写匹配条件

运算符

下面是XPath支持的运算符及其说明和示例的表格:

运算符说明举例
=等于比较price = 10
!=不等于比较price != 10
<小于比较year < 2000
<=小于等于比较year <= 2000
>大于比较quantity > 5
>=大于等于比较quantity >= 5
+加法运算sum + 10
-减法运算total - sum
*乘法运算width * height
divXPath 2.0 开始 除法运算4 div 2
mod取模运算10 mod 3
and逻辑与status = 'active' and year > 2000
or逻辑或status = 'active' or status = 'pending'
union集合并集set1 union set2
|节点集并集nodeList1 | nodeList2
?XPath 3.0 引入的序列类型测试xs:int() ? 1

注意:? 运算符是XPath 3.0及更高版本引入的,用于序列类型测试,不适用于所有XPath版本。在实际使用中,应根据XPath版本选择适用的运算符。

谓语(Predicates)

方括号中的谓语可以是任何表达式,只要它能返回一个布尔值。这可以是属性测试、位置测试或任何其他逻辑表达式。

  • 过滤节点集合。
  • 检索满足特定条件的节点。
  • 访问节点的属性或计算表达式的值。

例如:

  • book[price > 30] 选择所有price属性大于30的book元素。
  • */chapter[title='Introduction'] 选择所有子元素中标题为"Introduction"的chapter元素。

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']
    
    选取所有带有属性的 sym元素。
    .//*[local-name()='sym' and @*]
    

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命名空间必须在XPath引擎中被正确声明。)
    //w:sym
    

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 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 参考手册 - 语法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/41934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一台docker机器如何实现构建多平台镜像

1.实现方式 想在 x86_64/amd64 的一台机器平台上&#xff0c;构建适用于多个平台的镜像&#xff0c;例如 linux/amd64、linux/arm64&#xff0c;根据官方文档&#xff0c;有三种方法可以使用&#xff1a; QEMU   使用 QEMU 模拟构建多平台映像是最简单的入门方法&#xff0c…

前端面试题13(API请求方法)

在前端JavaScript中&#xff0c;进行API请求主要可以通过几种方式来实现&#xff0c;最常见的是使用XMLHttpRequest&#xff08;较旧的方法&#xff09;、fetch&#xff08;现代浏览器推荐方法&#xff09;以及使用第三方库如axios或jQuery.ajax等。 1. XMLHttpRequest 这是最…

仙人掌中的SNMP检测不到服务器

登录有问题的服务器1.检测snmp localhost:~ # ps -ef|grep snmp root 55180 1 0 08:37 ? 00:00:08 /usr/sbin/snmpd -r -A -LF n /var/log/net-snmpd.log -p /var/run/snmpd.pid root 58436 53989 0 09:44 pts/0 00:00:00 grep --colorauto snmp2.检测…

linux 编译perf 工具

centos7下编译步骤&#xff1a; wget https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.10.tar.gz tar -xf linux-3.10.tar.gz cd linux-3.10/tools/ yum install -y flex bison python2-devel make perf ./perf/perf top -d 1…

昇思第10天

RNN实现情感分类 二分类问题&#xff1a;Positive和Negative两类 步骤&#xff1a; 1.加载IMDB数据集 2.加载预训练词向量:预训练词向量是对输入单词的数值化表示&#xff0c;通过nn.Embedding层&#xff0c;采用查表的方式&#xff0c;输入单词对应词表中的index&#xff0c;…

【算法专题】模拟算法题

模拟算法题往往不涉及复杂的数据结构或算法&#xff0c;而是侧重于对特定情景的代码实现&#xff0c;关键在于理解题目所描述的情境&#xff0c;并能够将其转化为代码逻辑。所以我们在处理这种类型的题目时&#xff0c;最好要现在演草纸上把情况理清楚&#xff0c;再动手编写代…

FreeRTOS——队列集

一、队列集 一个队列只允许任务间传递的消息为 同一种数据类型 &#xff0c;如果需要在任务间 传递不同数据类型的消息 时&#xff0c;那么就可以使用队列集 作用&#xff1a;用于对多个队列或信号量进行“监听”&#xff08;接收或获取&#xff09;&#xff0c;其中 不管哪一…

js 使用 lodash-es 检测某个值是否是函数

import { isFunction } from lodash-eslet isA isFunction(() > {}) console.log(isA) //true https://www.lodashjs.com/docs/lodash.isFunction#_isfunctionvalue https://lodash.com/docs/4.17.15#isFunction 人工智能学习网站 https://chat.xutongbao.top

Spring框架配置进阶_自动装配(XML和注解)

Spring配置进阶 Spring 容器提供配置元数据有三种方式 XML配置文件。基于注解的配置。基于java的配置。 一、自动装配 应用程序上下文为你找出依赖项的过程,Spring会在上下文中自动查找&#xff0c;并自动给bean装配与其关联的属性 Spring中实现自动装配的方式有两种: XML文…

26-ARM常用汇编指令

汇编格式&#xff1a; label&#xff1a;instruction comment label&#xff1a;标号instruction&#xff1a;具体汇编指令comment&#xff1a;注释内容 常用段名&#xff1a; .text&#xff1a;代码段.data&#xff1a;初始化的数据段.bss&#xff1a;未初始化的数据段.ro…

Spring Boot+Vue项目从零入手

Spring BootVue项目从零入手 一、前期准备 在搭建spring bootvue项目前&#xff0c;我们首先要准备好开发环境&#xff0c;所需相关环境和软件如下&#xff1a; 1、node.js 检测安装成功的方法&#xff1a;node -v 2、vue 检测安装成功的方法&#xff1a;vue -V 3、Visu…

JSP WEB开发(一) JSP语言基础

目录 JSP JSP简介&#xff1a; JSP页面 JSP运行原理 JSP脚本元素 JAVA程序片 局部变量 全局变量和方法的声明 全局变量 方法的声明 程序片执行特点 synchronized关键字 表达式 JSP指令标记 page指令 include指令 JSP动作标记 JSP动作元素include和include指令的…

Docker在人工智能领域的应用与实战

摘要 人工智能&#xff08;AI&#xff09;技术的快速发展带来了对高效开发和部署工具的需求。Docker作为一个创新的容器化平台&#xff0c;为AI领域提供了强大的支持。本文详细介绍了Docker在AI模型开发、训练、部署以及服务器集群管理等方面的应用&#xff0c;并探讨了其在数…

AcWing 1550:完全二叉搜索树

【题目来源】https://www.acwing.com/problem/content/1552/【题目描述】二叉搜索树 (BST) 递归定义为具有以下属性的二叉树&#xff1a; &#xff08;1&#xff09;若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值 &#xff08;2&#xff09;若它的右…

大数据平台之数据同步

数据同步也成为CDC (Chanage Data Capture) 。Change Data Capture (CDC) 是一种用于跟踪和捕获数据库中数据变更的技术&#xff0c;它可以在数据发生变化时实时地将这些变更捕获并传递到下游系统。以下是一些常用的开源 CDC 方案&#xff1a; 1. Flink CDC Flink CDC 是基于 …

快速上手LangChain:构建强大的语言模型应用

引言 在人工智能和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;构建高效且强大的语言模型应用变得越来越重要。LangChain 是一个专为开发者设计的框架&#xff0c;它简化了语言模型应用的构建流程。本文将详细介绍LangChain的功能和使用方法&#xff0c;帮助读者…

76 4G模组 境外拨号入网注意

1 引言 最近朋友把国内的设备拿到新加坡了&#xff0c;然后发现原本国内可以使用的设备无法在异国他乡联网&#xff0c;所以就叫我来看看&#xff0c;发现是附网返回状态、入网APN发生了改变导致的。另外&#xff0c;如果在境外使用国产4G模组拨号入网&#xff0c;也需要关注4G…

Windows安装超好用的截图工具——Snipaste

1、下载 官网&#xff1a;https://zh.snipaste.com/ 2、安装 &#xff08;1&#xff09;解压下载的压缩包 &#xff08;2&#xff09;选中Snipaste.exe文件&#xff0c;右键发送到 -- > 桌面快捷方式 &#xff08;3&#xff09;双击桌面Snipaste图标&#xff0c;桌面右下…

linux 服务器数据备份 和 mysql 数据迁移

查看域名ip 查看程序所处文件位置 list open files 1、 lsof -i :port 查看端口获取进程 pid 2、lsof -i pid 1、scp 下载服务器文件到本地 security copy protocol 2、导出服务器 mysql 数据库&#xff08;表&#xff09;到本地 mysqldump是MySQL自带的一个实用程序&…

解析Java中1000个常用类:Date类,你学会了吗?

在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。程序员资料站 推荐一个程序员编程资料站:程序员的成长之路(http://cxyroad.com),收录了一些列的技术教程…