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

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),仅供参考

http://www.jsqmd.com/news/1206991/

相关文章:

  • 2026 保山黄金变现 TOP8 厂区务工本地居民乡镇住户卖金避坑全攻略光谱无损验金附带全门店地址电话 - 不晚生活号
  • 跨境宠物 / 婴童 / 运动 / POD 运营避坑:BESTSKY 文字商标全维度自查实操完整步骤
  • 基于大数据爬虫的免费在线音乐平台设计与实现任务书
  • 2026 吴中区老房翻新专项测评|本土靠谱装修服务商选型指南(合规无极限词) - 品牌优企推荐
  • Prompt工程实战:分层架构与自动化实践
  • 月活6380万 vs 2658万 vs ? 三大招聘平台关键指标横评,中高端用哪个? - 新闻快传
  • 亨得利西安维保服务全攻略|官网认证网点权威公告更新(2026年7月最新) - 亨得利腕表服务中心
  • 5个技巧让Salt Player把你的本地音乐变成Hi-Fi级享受![特殊字符]
  • 2026 宜宾装修公司哪家靠谱?本地实测多家装企,新房旧房工装均可参考 - 装修新知
  • 2026年7月长春联想笔记本服务门店推荐|从初检到维修验收|地址电话核对 - 品牌售后
  • OpenEuler工具集合安全实践:令牌管理与权限控制最佳方案
  • AI多因子分析框架:黄金为何跌破4000美元?历史周期给出的概率推演
  • 2026年7月厦门雷神笔记本门店推荐资料|电话、营业时间和到店流程|地址电话核对 - 数码专业售后
  • 2026年7月全国所在区域筛选清单|查询戴尔笔记本服务网点先确认城市门店数量|39家门店资料及城市筛选方法|XPS灵越与服务标签 - 大品牌推荐
  • Claude Code Agent Loop机制与自动化编程实践
  • Grasscutter Tools终极指南:5分钟掌握原神私服可视化管理
  • DLSS Swapper:游戏性能优化的智能管家,轻松管理三大图形技术版本
  • [特殊字符] Software Engineering New Grad Roles (182)
  • Akamai Cloud Manager安全最佳实践:10个技巧保护你的Linode服务
  • 基于SpringBoot聊天交友系统设计与实现任务书
  • 2026年7月最新北京企业预算管理系统服务商TOP7实测红榜发布:资质/实施/运维全维度核验 联创辉煌登顶综合榜首 - 互联网科技品牌测评
  • 2026年7月长春苹果设备门店推荐资料|电话、营业时间和到店流程|地址电话核对 - 数码品牌推荐
  • 微信聊天记录导出终极指南:从技术探索到合规思考
  • 告别B站视频广告干扰:小电视空降助手如何让观看体验更纯粹?
  • 实战指南:从零搭建企业级CVAT计算机视觉标注平台
  • 亨得利大陆维保服务全解析|官网备案维修网点权威公布(2026年7月最新) - 亨得利中国服务中心
  • 完整实战指南:快速上手LLM知识图谱构建工具
  • 3个步骤让机器人理解你的语言:LeRobot视觉语言动作框架深度解析
  • 如何一劳永逸解决Windows依赖问题:VisualCppRedist AIO完全指南
  • 2026年7月全国所在区域筛选清单|查询宏碁笔记本服务网点先确认城市门店数量|39家门店资料及城市筛选方法|非凡蜂鸟与暗影骑士 - 笔记本专业售后