XPath的substring()函数是用于从目标字符串中截取指定片段的内置函数,在XML、HTML文档解析以及数据提取场景中应用十分广泛,它的截取逻辑和常见的编程语言字符串截取规则存在一定差异,需要开发者准确理解参数含义才能正确使用。

substring()函数基础语法
substring()函数的标准语法格式如下:
substring(源字符串, 起始位置, 截取长度)
其中三个参数的含义分别为:
- 源字符串:需要被截取的目标字符串,可以是直接的字符串字面量,也可以是返回字符串的XPath表达式。
- 起始位置:截取开始的位置,XPath中字符串的索引从1开始,而不是常见的0开始。
- 截取长度:可选参数,表示需要截取的字符数量,如果不传入该参数,会截取从起始位置到字符串末尾的所有内容。
核心截取规则说明
1. 索引从1开始
和Java、Python等编程语言不同,XPath的字符串索引起始值为1,第一个字符的位置是1,第二个是2,以此类推。如果传入的起始位置是0,函数会返回空字符串。
2. 起始位置小于1的处理
当传入的起始位置小于1时,函数会从字符串的第一个字符开始截取,同时截取长度会减去(1 - 起始位置)的差值。例如起始位置是-1,截取长度是5,实际截取长度是5 - (1 - (-1)) = 3,也就是截取前3个字符。
3. 起始位置超出字符串长度的处理
如果传入的起始位置大于源字符串的总长度,函数会直接返回空字符串,不会抛出错误。
4. 截取长度不足的处理
当从起始位置到字符串末尾的剩余字符数量小于传入的截取长度时,函数会返回从起始位置到末尾的所有字符,不会补位也不会报错。
5. 省略截取长度的情况
如果不传入第三个截取长度参数,函数会截取从起始位置开始到源字符串末尾的所有内容。
使用示例
下面通过具体的XPath表达式和对应的返回结果来展示不同场景下的截取效果,假设源字符串为"XPathSubstringDemo":
| XPath表达式 | 返回结果 | 规则说明 |
|---|---|---|
| substring("XPathSubstringDemo", 1, 5) | XPath | 从索引1开始截取5个字符 |
| substring("XPathSubstringDemo", 6, 9) | Substring | 从索引6开始截取9个字符 |
| substring("XPathSubstringDemo", 0, 3) | 空字符串 | 起始位置为0返回空 |
| substring("XPathSubstringDemo", -2, 5) | XPa | 起始位置小于1,截取长度调整为5-(1-(-2))=2,截取前2个字符 |
| substring("XPathSubstringDemo", 20, 5) | 空字符串 | 起始位置超出字符串长度返回空 |
| substring("XPathSubstringDemo", 15, 10) | Demo | 剩余字符不足10个,返回剩余所有字符 |
| substring("XPathSubstringDemo", 6) | SubstringDemo | 省略截取长度,返回从索引6到末尾的内容 |
实际应用场景示例
在实际的HTML解析场景中,我们经常会遇到需要截取元素文本内容的情况,比如下面的HTML片段:
<div class="info">发布时间:2024-05-20 14:30:00</div>
如果我们只需要提取发布日期部分,不需要具体时间,可以使用如下XPath表达式:
substring(//div[@class="info"]/text(), 6, 10)
该表达式先定位到class为info的div元素,提取其文本内容,然后从索引6开始截取10个字符,最终返回结果为"2024-05-20"。
注意事项
- substring()函数处理的是字符串值,如果源字符串表达式返回的不是字符串类型,XPath会先将其自动转换为字符串再处理。
- 如果传入的截取长度参数不是正数,函数会返回空字符串。
- 该函数对中文、英文、数字等字符的处理是一致的,每个字符都占用1个索引位置,不会因为字符编码不同产生差异。
substring()函数是XPath字符串处理的基础函数,掌握它的截取规则可以帮助开发者更高效地完成文档内容提取任务,建议结合实际场景多做练习加深理解。
XPathsubstring_函数XML解析字符串截取路径表达式修改时间:2026-06-17 02:36:26