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) // 返回titlelocal-name()- 获取本地名称返回节点的本地名称不包含命名空间前缀。local-name(bookstore) // 返回bookstore local-name(//mybook:book) // 返回booknamespace-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, 2005contains()- 检查包含关系检查第一个字符串是否包含第二个字符串。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) // 返回234substring-before()- 获取前缀子串返回第一个字符串中出现在第二个字符串之前的部分。substring-before(tattoo, attoo) // 返回tsubstring-after()- 获取后缀子串返回第一个字符串中出现在第二个字符串之后的部分。substring-after(tattoo, tat) // 返回toostring-length()- 获取字符串长度返回字符串的长度。string-length(Harp not on that string, madam; that is past.) // 返回45 string-length(normalize-space( abc )) // 返回3normalize-space()- 规范化空格移除字符串开头和结尾的空格并将中间的连续空格替换为单个空格。normalize-space( Hello World ) // 返回Hello Worldtranslate()- 字符替换将字符串中的字符替换为其他字符。translate(bar,abc,ABC) // 返回BAr translate(--aaa--,abc-,ABC) // 返回AAA translate(abcdabc, abc, AB) // 返回ABdABmatches()- 正则表达式匹配使用正则表达式检查字符串是否匹配模式。matches(abracadabra, bra) // 返回true matches(abracadabra, (?i)^A.*A$) // 返回true不区分大小写 matches(abracadabra, ^a.*a$) // 返回true3. 数值函数Numeric Functions数值函数用于处理数字计算和转换。number()- 转换为数字将值转换为数字。number(10) // 返回10 number(1.11) // 返回1.11 number(10) 10 // 返回truesum()- 求和计算节点集中所有数值的总和。sum(1 2) // 返回3 sum(1.1 2) // 返回3.1 sum(//book/price) // 计算所有book的price总和ceiling()- 向上取整返回不小于参数的最小整数。ceiling(5.2) // 返回6 ceiling(4.8) // 返回5floor()- 向下取整返回不大于参数的最大整数。floor(5.2) // 返回5 floor(4.8) // 返回4round()- 四舍五入返回最接近参数的整数。round(5.2) // 返回5 round(5.6) // 返回6 round(5.5) // 返回64. 布尔函数Boolean Functions布尔函数用于逻辑判断和布尔值处理。boolean()- 转换为布尔值将值转换为布尔值。boolean(0) // 返回false boolean(1) // 返回true boolean(//*[lang]) // 如果存在lang属性则返回truenot()- 逻辑非返回参数的逻辑非。not(0) // 返回true not(1) // 返回false //employee[not(id 1)] // 选择id不等于1的employee元素true()- 返回真值始终返回true。true() // 返回truefalse()- 返回假值始终返回false。false() // 返回false5. 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;webreverse()- 反转序列反转节点序列的顺序XPath 2.0函数。6. 不支持的函数根据项目文档以下XPath函数目前不支持choose()- 条件选择current()- 当前节点上下文document()- 加载外部文档element-available()- 检查元素可用性format-number()- 格式化数字function-available()- 检查函数可用性generate-id()- 生成唯一IDid()- 根据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)]示例2HTML文档处理对于HTML文档XPath函数同样适用// 选择所有链接 //a[href] // 选择包含特定文本的元素 //*[contains(text(), 搜索)] // 选择特定class的元素 //div[contains(class, container)] // 获取页面标题 string(//title)示例3JSON文档查询虽然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文档这个项目都能提供高效的查询能力。通过本文的介绍你应该已经掌握了✅ 所有支持的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创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考