XPath的string()函数是用于获取节点字符串值的内置函数,它会将目标节点及其所有后代节点的文本内容合并为一个字符串返回,是XML和HTML解析场景中常用的内容提取工具。

string()函数的基本语法
string()函数的语法非常简单,基本格式如下:
string(node)
其中node是要获取字符串值的节点,如果不传入参数,默认会获取上下文节点的字符串值。函数返回的结果是一个字符串,包含了目标节点下所有文本内容,会自动忽略标签本身,只保留文本部分。
不同场景下的取值规则
1. 普通元素节点
对于普通的元素节点,string()会拼接该节点下所有后代的文本节点内容,不管文本分布在多少层子节点中。
比如有如下HTML结构:
<div class="content">
<p>第一段内容</p>
<p>第二段内容</p>
</div>
使用XPath表达式string(//div[@class="content"]),返回的结果是第一段内容第二段内容,两个p标签的文本会被合并成一个字符串。
2. 包含属性的节点
string()函数只会提取文本内容,不会包含节点的属性值,即使属性值看起来和文本相关也不会被纳入结果。
比如如下结构:
<span title="提示文本">实际内容</span>
使用string(//span)返回的结果是实际内容,title属性的内容不会被包含在内。
3. 空节点或不存在的节点
如果传入的节点不存在,或者节点下没有任何文本内容,string()函数会返回空字符串,不会抛出异常。
string()和text()的区别
很多开发者会混淆string()和text()的用法,两者的核心区别如下:
| 对比项 | string()函数 | text()方法 |
|---|---|---|
| 返回值类型 | 单个字符串 | 文本节点集合 |
| 后代文本处理 | 自动拼接所有后代文本 | 只返回当前节点的直接文本子节点 |
| 空节点处理 | 返回空字符串 | 返回空集合 |
比如对于之前的div结构,使用//div[@class="content"]/text()会返回空集合,因为div的直接子节点是p标签,没有直接文本子节点,而string()可以正确返回所有后代文本。
实际代码示例
下面以Python的lxml库为例,演示如何使用string()函数获取节点字符串值:
from lxml import etree
# 示例HTML内容
html_content = """
<div class="article">
<h3>文章标题</h3>
<p>文章第一段,包含<em>重点内容</em>。</p>
<p>文章第二段,补充说明。</p>
</div>
"""
# 解析HTML
tree = etree.HTML(html_content)
# 使用XPath的string()函数获取div的字符串值
result = tree.xpath("string(//div[@class='article'])")
print(result)
运行上述代码,输出结果为:
文章标题 文章第一段,包含重点内容。 文章第二段,补充说明。
可以看到,h3和p标签下的所有文本,包括em标签内的文本都被合并成了一个完整的字符串返回。
注意事项
- string()函数返回的是纯文本,不会保留任何HTML或XML标签,如果需要保留标签结构,不能使用该函数。
- 当节点下有多个文本节点分散在不同层级时,string()会按顺序拼接,不会自动添加分隔符,如果需要分隔符需要后续自行处理。
- 在部分XPath解析器中,如果上下文节点不明确,建议明确指定要获取字符串值的节点路径,避免取到不符合预期的上下文节点内容。
XPathstring()函数节点字符串值XML解析HTML解析修改时间:2026-07-11 14:21:22