XPath的substring()函数如何提取子字符串?

来源:网站主作者:沙月恵奈‌头衔:网络博主
导读:本期聚焦于小伙伴创作的《XPath的substring()函数如何提取子字符串?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《XPath的substring()函数如何提取子字符串?》有用,将其分享出去将是对创作者最好的鼓励。

XPath的substring()函数是用于从字符串中提取指定子串的内置函数,它可以根据起始位置和长度参数,精准截取目标字符串的对应部分,在XML、HTML文档解析场景中使用频率很高。

XPath的substring()函数如何提取子字符串?

substring()函数的基本语法

substring()函数的标准语法格式如下:

<!-- 语法格式 -->
substring(源字符串, 起始位置, 截取长度)

三个参数的具体含义如下:

  • 源字符串:需要提取子串的原始字符串,可以是直接的字符串字面量,也可以是返回字符串的XPath表达式,比如节点文本内容。
  • 起始位置:截取子串的开始位置,XPath中字符串的索引从1开始,不是从0开始。
  • 截取长度:可选参数,指定需要截取的字符数量,如果不传这个参数,会截取从起始位置到源字符串末尾的所有内容。

基础使用示例

提取固定长度的子串

假设我们有一个XML文档,其中<user>节点的text内容是张三_2024001,我们需要提取前面的用户姓名,也就是前两个字符:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <user>张三_2024001</user>
</root>

对应的XPath表达式如下:

<!-- 提取user节点内容的前2个字符 -->
substring(/root/user/text(), 1, 2)

执行这个表达式后,返回的结果是张三

截取从指定位置到末尾的内容

还是以上面的XML为例,如果我们需要提取下划线后面的用户编号,也就是从第3个字符开始到末尾的内容:

<!-- 从第3个字符开始截取到末尾 -->
substring(/root/user/text(), 3)

执行后返回的结果是_2024001

结合其他XPath函数使用

substring()函数经常会和string-length()contains()等函数配合使用,处理更复杂的提取需求。

提取最后N个字符

如果我们想提取字符串的最后3个字符,可以先计算字符串总长度,再计算起始位置:

<!-- 提取user节点内容的最后3个字符 -->
substring(/root/user/text(), string-length(/root/user/text()) - 2, 3)

上面的表达式中,string-length()用来获取源字符串的总长度,减去2之后得到倒数第3个字符的位置,再截取3个字符,最终返回001

根据分隔符提取内容

当字符串中包含固定的分隔符时,可以结合contains()string-length()实现动态提取:

<!-- 提取分隔符_之前的内容 -->
substring(/root/user/text(), 1, string-length(/root/user/text()) - string-length(substring-after(/root/user/text(), '_')))

这里substring-after()函数会返回分隔符_后面的内容,用总长度减去这部分的长度,就得到了分隔符前面内容的长度,再用substring()截取即可,返回结果是张三

使用注意事项

  • 起始位置如果小于1,会按照1来计算,比如substring('abc', 0, 2)的结果是ab
  • 如果起始位置大于源字符串的长度,函数会返回空字符串。
  • 如果截取长度小于等于0,也会返回空字符串。
  • 如果起始位置加截取长度超过了源字符串的长度,会截取从起始位置到末尾的所有内容,不会报错。

不同解析库中的使用差异

大部分支持XPath 1.0的解析库都支持substring()函数,比如Python的lxml库、Java的JDOM库等,使用方式基本一致。下面是Python lxml库的使用示例:

from lxml import etree

# 构造XML文档
xml_content = """<?xml version="1.0" encoding="UTF-8"?>
<root>
    <user>张三_2024001</user>
</root>"""

# 解析文档
tree = etree.fromstring(xml_content.encode('utf-8'))

# 执行XPath提取
result = tree.xpath('substring(/root/user/text(), 1, 2)')
print(result)  # 输出:张三

需要注意的是,XPath 2.0及以上版本还提供了substring-before()substring-after()等更便捷的截取函数,如果是使用支持高版本XPath的解析库,也可以根据需求选择对应的函数。

XPathsubstring_functionXML解析子字符串提取修改时间:2026-06-10 06:30:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。