gh_mirrors/xpath/xpath支持的XPath函数全清单:从基础到高级

📅 2026/7/17 14:04:16 👁️ 阅读次数 📝 编程学习
gh_mirrors/xpath/xpath支持的XPath函数全清单:从基础到高级

gh_mirrors/xpath/xpath支持的XPath函数全清单:从基础到高级

【免费下载链接】xpathXPath package for golang, supports HTML, XML, JSON document query and more项目地址: https://gitcode.com/gh_mirrors/xpath/xpath

如果你正在寻找一个功能强大的Go语言XPath包来查询XML、HTML和JSON文档,那么gh_mirrors/xpath/xpath项目绝对是你的不二之选!🎯 这个项目提供了完整的XPath 1.0支持,并包含了许多XPath 2.0的函数,让你能够轻松处理各种文档查询需求。本文将为你详细介绍该项目支持的所有XPath函数,从基础到高级,帮助你快速掌握这个强大的工具。

📋 项目简介

gh_mirrors/xpath/xpath是一个Go语言的XPath包,支持从XML、HTML和JSON文档中选择节点。该项目是antchfx/xpath的镜像仓库,提供了稳定可靠的XPath实现。通过这个包,你可以轻松地对文档进行复杂的查询和筛选操作。

🎯 核心XPath函数分类

1. 节点集函数(Node-Set Functions)

节点集函数主要用于处理节点集合,帮助你获取节点信息或统计节点数量。

position()- 获取节点位置

返回当前节点在节点集中的位置(从1开始计数)。

//book[position() = 1] // 选择第一个book元素 //li[position() mod 2 = 0] // 选择偶数位置的li元素
last()- 获取最后一个节点

返回节点集中最后一个节点的位置。

//book[last()] // 选择最后一个book元素 //ul/li[last()] // 选择ul中最后一个li元素
count()- 统计节点数量

返回节点集中的节点数量。

count(//book) // 统计所有book元素的数量 count(//book[3]/author) // 统计第三个book元素的author子元素数量
name()- 获取节点名称

返回节点的完整名称(包括命名空间前缀)。

name(//html/@lang) // 返回"lang" name(html/head/title) // 返回"title"
local-name()- 获取本地名称

返回节点的本地名称(不包含命名空间前缀)。

local-name(bookstore) // 返回"bookstore" local-name(//mybook:book) // 返回"book"
namespace-uri()- 获取命名空间URI

返回节点的命名空间URI。

2. 字符串函数(String Functions)

字符串函数用于处理和操作文本内容,是XPath中最常用的函数类别之一。

string()- 转换为字符串

将任意类型的值转换为字符串。

string(1.23) // 返回"1.23" string(//book/@category) // 返回属性值
concat()- 连接字符串

将多个字符串连接成一个字符串。

concat("1", "2", "3") // 返回"123" concat(//book[1]/title, ", ", //book[1]/year) // 返回"Everyday Italian, 2005"
contains()- 检查包含关系

检查第一个字符串是否包含第二个字符串。

contains("tattoo", "t") // 返回true contains("tattoo", "T") // 返回false //book[contains(title, "Potter")] // 选择标题包含"Potter"的book元素
starts-with()- 检查前缀

检查字符串是否以指定前缀开头。

starts-with("tattoo", "tat") // 返回true starts-with("tattoo", "att") // 返回false //book[starts-with(title,'Everyday')] // 选择标题以"Everyday"开头的book元素
ends-with()- 检查后缀

检查字符串是否以指定后缀结尾。

ends-with("tattoo", "tattoo") // 返回true ends-with("tattoo", "atto") // 返回false //book[ends-with(@category,'ing')] // 选择category属性以"ing"结尾的book元素
substring()- 获取子字符串

从字符串中提取子字符串。

substring("motor car", 6) // 返回" car" substring("metadata", 4, 3) // 返回"ada" substring("12345", 1.5, 2.6) // 返回"234"
substring-before()- 获取前缀子串

返回第一个字符串中出现在第二个字符串之前的部分。

substring-before("tattoo", "attoo") // 返回"t"
substring-after()- 获取后缀子串

返回第一个字符串中出现在第二个字符串之后的部分。

substring-after("tattoo", "tat") // 返回"too"
string-length()- 获取字符串长度

返回字符串的长度。

string-length("Harp not on that string, madam; that is past.") // 返回45 string-length(normalize-space(' abc ')) // 返回3
normalize-space()- 规范化空格

移除字符串开头和结尾的空格,并将中间的连续空格替换为单个空格。

normalize-space(' Hello World ') // 返回"Hello World"
translate()- 字符替换

将字符串中的字符替换为其他字符。

translate("bar","abc","ABC") // 返回"BAr" translate("--aaa--","abc-","ABC") // 返回"AAA" translate("abcdabc", "abc", "AB") // 返回"ABdAB"
matches()- 正则表达式匹配

使用正则表达式检查字符串是否匹配模式。

matches("abracadabra", "bra") // 返回true matches("abracadabra", "(?i)^A.*A$") // 返回true(不区分大小写) matches("abracadabra", "^a.*a$") // 返回true

3. 数值函数(Numeric Functions)

数值函数用于处理数字计算和转换。

number()- 转换为数字

将值转换为数字。

number(10) // 返回10 number(1.11) // 返回1.11 number("10") = 10 // 返回true
sum()- 求和

计算节点集中所有数值的总和。

sum(1 + 2) // 返回3 sum(1.1 + 2) // 返回3.1 sum(//book/price) // 计算所有book的price总和
ceiling()- 向上取整

返回不小于参数的最小整数。

ceiling(5.2) // 返回6 ceiling(4.8) // 返回5
floor()- 向下取整

返回不大于参数的最大整数。

floor(5.2) // 返回5 floor(4.8) // 返回4
round()- 四舍五入

返回最接近参数的整数。

round(5.2) // 返回5 round(5.6) // 返回6 round(5.5) // 返回6

4. 布尔函数(Boolean Functions)

布尔函数用于逻辑判断和布尔值处理。

boolean()- 转换为布尔值

将值转换为布尔值。

boolean(0) // 返回false boolean(1) // 返回true boolean(//*[@lang]) // 如果存在lang属性则返回true
not()- 逻辑非

返回参数的逻辑非。

not(0) // 返回true not(1) // 返回false //employee[not(@id = "1")] // 选择id不等于1的employee元素
true()- 返回真值

始终返回true。

true() // 返回true
false()- 返回假值

始终返回false。

false() // 返回false

5. XPath 2.0扩展函数

虽然项目主要支持XPath 1.0,但也包含了一些XPath 2.0的函数。

lower-case()- 转换为小写

将字符串转换为小写(XPath 2.0函数)。

string-join()- 连接字符串序列

使用分隔符连接字符串序列(XPath 2.0函数)。

string-join("some text", ";") // 返回"some text" string-join(//book/@category, ";") // 返回"cooking;children;web;web"
reverse()- 反转序列

反转节点序列的顺序(XPath 2.0函数)。

6. 不支持的函数

根据项目文档,以下XPath函数目前不支持:

  • choose()- 条件选择
  • current()- 当前节点上下文
  • document()- 加载外部文档
  • element-available()- 检查元素可用性
  • format-number()- 格式化数字
  • function-available()- 检查函数可用性
  • generate-id()- 生成唯一ID
  • id()- 根据ID选择元素
  • key()- 使用键值选择
  • lang()- 检查语言
  • system-property()- 获取系统属性
  • unparsed-entity-url()- 获取未解析实体URL

🚀 实际应用示例

示例1:图书目录查询

假设我们有一个图书目录的XML文档,可以使用以下XPath查询:

// 选择2005年出版的所有图书 //book[year = 2005] // 选择价格超过40元的图书 //book[sum(./price) > 40] // 选择分类为"cooking"的图书 //book[@category = 'cooking'] // 选择标题包含"Potter"的图书 //book[contains(title, "Potter")]

示例2:HTML文档处理

对于HTML文档,XPath函数同样适用:

// 选择所有链接 //a[@href] // 选择包含特定文本的元素 //*[contains(text(), "搜索")] // 选择特定class的元素 //div[contains(@class, "container")] // 获取页面标题 string(//title)

示例3:JSON文档查询

虽然JSON文档的结构不同,但XPath查询原理相似:

// 选择所有用户 //users // 选择年龄大于18的用户 //users[age > 18] // 选择特定城市的用户 //users[city = '北京']

📊 函数速查表

函数类别函数名描述支持状态
节点集position()获取节点位置
节点集last()获取最后一个节点
节点集count()统计节点数量
节点集name()获取节点名称
节点集local-name()获取本地名称
节点集namespace-uri()获取命名空间URI
字符串string()转换为字符串
字符串concat()连接字符串
字符串contains()检查包含关系
字符串starts-with()检查前缀
字符串ends-with()检查后缀
字符串substring()获取子字符串
字符串substring-before()获取前缀子串
字符串substring-after()获取后缀子串
字符串string-length()获取字符串长度
字符串normalize-space()规范化空格
字符串translate()字符替换
字符串matches()正则表达式匹配
数值number()转换为数字
数值sum()求和
数值ceiling()向上取整
数值floor()向下取整
数值round()四舍五入
布尔boolean()转换为布尔值
布尔not()逻辑非
布尔true()返回真值
布尔false()返回假值
XPath 2.0lower-case()转换为小写
XPath 2.0string-join()连接字符串序列
XPath 2.0reverse()反转序列

💡 使用技巧与最佳实践

1. 性能优化建议

  • 尽量使用具体的路径表达式,避免使用//全局搜索
  • 在可能的情况下使用属性选择器,它们通常比文本选择器更快
  • 缓存编译后的XPath表达式,避免重复编译

2. 错误处理

  • 使用MustCompile函数时要注意错误处理
  • 对于复杂的XPath表达式,建议先测试再使用
  • 注意数据类型转换可能导致的错误

3. 兼容性考虑

  • 该项目支持Go 1.14及以上版本
  • 主要遵循XPath 1.0标准,部分支持XPath 2.0
  • 与W3C XPath标准高度兼容

🔧 项目结构与源码

项目的核心XPath函数实现在以下文件中:

  • func.go - 包含所有XPath函数的实现
  • func_pre_go110.go - Go 1.10之前的兼容实现
  • func_go110.go - Go 1.10及之后的优化实现
  • xpath_function_test.go - XPath函数的测试用例

🎉 总结

gh_mirrors/xpath/xpath项目提供了完整且强大的XPath函数支持,涵盖了XPath 1.0的大部分功能以及部分XPath 2.0功能。无论你是需要处理XML、HTML还是JSON文档,这个项目都能提供高效的查询能力。

通过本文的介绍,你应该已经掌握了:

  1. ✅ 所有支持的XPath函数及其用法
  2. ✅ 函数的分类和实际应用示例
  3. ✅ 性能优化和使用技巧
  4. ✅ 项目结构和源码位置

现在你可以开始使用这个强大的XPath包来处理你的文档查询需求了!无论是简单的元素选择还是复杂的条件筛选,gh_mirrors/xpath/xpath都能帮助你轻松完成。🚀

记住,实践是最好的学习方式。尝试在自己的项目中使用这些XPath函数,你会发现文档处理变得如此简单高效!

【免费下载链接】xpathXPath package for golang, supports HTML, XML, JSON document query and more项目地址: https://gitcode.com/gh_mirrors/xpath/xpath

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考