XPath 1.0 完整用法指南

XPath 1.0 完整用法指南

一、XPath 1.0 概述

XPath 1.0 是W3C于1999年发布的XML路径语言标准,用于在XML文档中定位和选择节点。

二、基本概念

节点类型

  1. 根节点 - 文档的根
  2. 元素节点 - XML元素
  3. 属性节点 - 元素的属性
  4. 文本节点 - 元素的文本内容
  5. 注释节点 - XML注释
  6. 处理指令节点 - 处理指令

三、定位路径语法

  1. 基本定位路径
python 复制代码
// 绝对路径
/root/child/grandchild

// 相对路径
child/grandchild

// 选择所有元素
*

// 当前节点
.

// 父节点
..
  1. 轴(Axes)
python 复制代码
// 子节点
child::book

// 后代节点
descendant::chapter

// 父节点
parent::book

// 祖先节点
ancestor::section

// 后面的兄弟节点
following-sibling::chapter

// 前面的兄弟节点
preceding-sibling::chapter

// 属性
attribute::id
@id  // 简写形式

// 命名空间
namespace::*

// 所有后代(包括当前节点)
descendant-or-self::node()

// 所有祖先(包括当前节点)
ancestor-or-self::div

四、谓词(Predicates)

基本谓词

python 复制代码
// 按位置选择
/book[1]                    // 第一个book元素
/book[last()]               // 最后一个book元素
/book[position() > 1]       // 除第一个外的所有book

// 按属性选择
// 有id属性的book
/book[@id]
// id为"123"的book
/book[@id='123']
// id包含"abc"的book
/book[contains(@id, 'abc')]

复合谓词

python 复制代码
// 多条件
/book[@category='fiction' and @price>20]
/book[@category='fiction' or @category='non-fiction']
/book[not(@outofprint)]

五、运算符

比较运算符

python 复制代码
=    // 等于
!=   // 不等于
<    // 小于
<=   // 小于等于
>    // 大于
>=   // 大于等于

布尔运算符

python 复制代码
and
or
not()

算术运算符

python 复制代码
+    // 加法
-    // 减法
*    // 乘法
div  // 除法
mod  // 取模

六、核心函数

节点集函数

python 复制代码
// 计数
count(book)                 // book元素数量
// 位置
position()                  // 当前节点位置
last()                      // 最后一个位置
// 本地名称
local-name()               // 节点本地名
local-name(book)           // book元素的本地名
// 命名空间URI
namespace-uri()
// 节点名称
name()                     // 节点完整名称

字符串函数

python 复制代码
// 字符串操作
string()                   // 转换为字符串
concat('a', 'b', 'c')     // 连接字符串
starts-with('abc', 'ab')  // 是否以某字符串开头
contains('abc', 'bc')     // 是否包含子串
substring('abc', 2)       // 从位置2开始截取
substring('abc', 2, 1)    // 从位置2截取1个字符
string-length('abc')      // 字符串长度
normalize-space('  a  b  ') // 规范化空白字符
translate('abc', 'abc', 'ABC') // 字符替换
substring-before('a/b', '/')  // 返回'/'之前的部分
substring-after('a/b', '/')   // 返回'/'之后的部分

布尔函数

python 复制代码
boolean()      // 转换为布尔值
true()         // 返回true
false()        // 返回false
not()          // 逻辑非
lang('en')     // 检查语言

数值函数

python 复制代码
number()       // 转换为数字
sum()          // 求和
floor()        // 向下取整
ceiling()      // 向上取整
round()        // 四舍五入

七、实用示例

  1. 选择特定节点
python 复制代码
// 选择所有book元素
//book

// 选择所有price元素
//price

// 选择book的所有子元素
/book/*
  1. 条件选择
python 复制代码
// 选择价格>30的book
//book[price > 30]

// 选择有author子元素的book
//book[author]

// 选择第一个chapter
//chapter[1]

// 选择倒数第二个book
//book[last()-1]
  1. 属性选择
python 复制代码
// 选择所有id属性
//@id

// 选择特定属性值
//book[@id='b001']

// 选择多个属性值之一
//book[@category='fiction' or @category='novel']
  1. 文本和注释
python 复制代码
// 选择文本节点
//book/title/text()

// 选择注释
//book/comment()

八、高级用法

  1. 联合查询
python 复制代码
// 选择book和magazine元素
//book | //magazine

// 选择title和author
//book/title | //book/author
  1. 嵌套路径
python 复制代码
// 选择chapter下的所有section标题
//chapter//section/title

// 选择父元素
//title/../@id
  1. 使用变量(在XSLT中)
python 复制代码
// XSLT中使用
<xsl:variable name="minPrice" select="20"/>
//book[price > $minPrice]

九、注意事项

  1. 大小写敏感:XML元素和属性名称区分大小写
  2. 索引从1开始:XPath中位置索引从1开始
  3. 空节点集:不存在的节点返回空节点集,不会报错
  4. 上下文节点:相对路径基于当前上下文节点
  5. 性能考虑://操作符可能影响性能,应谨慎使用

十、浏览器控制台测试

javascript 复制代码
// 在浏览器中测试XPath
const result = document.evaluate(
  '//div[@class="content"]',
  document,
  null,
  XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
  null
);

for (let i = 0; i < result.snapshotLength; i++) {
  console.log(result.snapshotItem(i));
}

这个指南涵盖了XPath 1.0的主要功能,适用于大多数XML处理场景。

相关推荐
tyh_keepRunning1 天前
Cursor与MCP的天作之和
selenium·ai·语言模型·chatgpt·idea
掌心向暖RPA自动化2 天前
用影刀RPA获取公呺搜索关键词文章数据,如何判断文章条目元素是否在可视区域?| 文章列表的循环点击方案拆解
经验分享·自动化·新媒体运营·rpa·影刀rpa
阿蔹2 天前
UI测试自动化-Web-Python-Selenium-2-元素操作、浏览器操作
前端·python·selenium·ui·自动化
天空属于哈夫克32 天前
利用 RPA 绕过 API 限制,实现企业微信外部群主动触达
企业微信·rpa
天空属于哈夫克32 天前
基于 RPA 自动化实现企业微信外部群消息触达的逻辑与实现
自动化·企业微信·rpa
天空属于哈夫克32 天前
基于 RPA 自动化实现企微外部群消息触达的逻辑与实践
自动化·企业微信·rpa
天空属于哈夫克32 天前
企业微信外部群RPA自动化实战
自动化·企业微信·rpa