XPath(一)
一:概述
XPath是xml的查询语言,其根据xml文档的结构(层次结构、线性结构)使用绝对定位或相对定位的方式,查找符合条件的内容。所谓的层次结构是指层层包含的关系,这有点像操作系统中的嵌套目录;而线性结构是一种并列的关系(线性[Linear]兄弟[Sibling]关系),这种关系是两个或多个节点有一个共同的父节点。在线性兄弟关系中我们还需要了解以下术语:前导兄弟(Preceding sibling)、后继兄弟(Following sibling)。这些关系可以通过以下的实例分析了解清楚:
SystemDisk.xml
<?xml version="1.0" encoding="utf-8" ?> <文件系统 名称="系统盘"> <目录 创建时间="2010-07-28" 名称="Windows"> <目录 创建时间="2010-07-28" 名称="System32"> <文件 创建时间="2010-07-28" 名称="cmd.exe"/> <文件 创建时间="2010-07-28" 名称="regidet.exe"/> </目录> <文件 创建时间="2010-07-28" 名称="winhelp.exe"/> </目录> </文件系统>
|
<文件 创建时间="2010-07-28" 名称="cmd.exe"/> <文件 创建时间="2010-07-28" 名称="regidet.exe"/> |
"文件"元素之间就是兄弟关系。
-
前导兄弟:在兄弟关系中,名称为cmd.exe的元素出现在regidet.exe的前边,那么文件名称为cmd.exe的元素就是regidet.exe的前导兄弟。
后继兄弟:在兄弟关系中,名称为regide.exe的元素出现在cmd.exet的后边,那么文件名称为regidet.exe的元素就是cmd.exe的后继兄弟。
3.根节点和根元素
在层次结构的时候提到了一个概念:根节点。在XPath中根节点用"/"(斜线)表示,所谓的根节点是指xml的文档节点,包括xml声明、DOCTYPE声明、顶层的处理指令、顶层注释和根元素节点。
根元素是指包含其他元素的节点(也可以这样说:所有元素的父节点就是根节点),一个xml文档只能有一个根元素,同时根元素是根节点的一部分。
4.绝对定位和相对定位
绝对定位:XPath表达式以根节点(/)开始定位称为绝对定位。
相对定位:XPath表达式不以根节点(/)开始定位称为相对定位,相对定位从当前上下文节点开始定位。
二.XPath使用详解
1.相关概念:串联定位步骤和并联定位步骤,轴、节点测试和谓词。
- 串联定位步骤:每个定位步骤之间用(/)隔开,从最左边开始匹配节点,如果前面匹配失败,后面的匹配就不会继续,如下面的xml文件
<?xml version="1.0" encoding="utf-8" ?> <文件系统 名称="系统盘"> <目录 创建时间="2010-07-28" 名称="Windows"> <目录 创建时间="2010-07-28" 名称="System32"> <文件 创建时间="2010-07-28" 名称="cmd.exe"/> <文件 创建时间="2010-07-28" 名称="regidet.exe"/> </目录> <文件 创建时间="2010-07-28" 名称="winhelp.exe"/> </目录> </文件系统> |
如果使用XPath表达式"文件系统/目录/文件",则只能找到名称为"winhelp.exe"的元素。
- 并联定位步骤(|):如果想获取所有目录下的文件元素,我们可以使用并联定位步骤(相当于或者),表达式可以这样写:"文件系统/目录/文件|文件系统/目录/目录/文件"。当然我们也可以通过相对定位来解决这个问题:"目录/文件"。
- 轴:复杂的查询可能由3部分组成,轴::节点测试[谓词]。我们先说轴(Axis),轴表示查找的内容是以那个节点为基准并向某一个方向查,或者说从那个节点开始并向某一个方向查。这个基准节点就是轴,XPath中定义了13条轴。
- 节点测试(Node-test):表示从轴开始要查找的节点。
- 谓词(Predicate):表示要查找节点的条件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理