XPath中获取所有后代文本节点的核心表达式是//text(),它返回文本节点集合而非拼接字符串;实际应用中常配合normalize-space()过滤空白节点,并需宿主语言完成最终字符串拼接。
XPath 中没有直接的“并集”操作符来合并多个文本节点的内容,但可以通过 //text() 选中所有后代文本节点(非空、非空白的需额外过滤),这是最接近“所有后代文本节点集合”的表达方式。
//text() 会选取当前上下文节点的所有后代元素中的所有文本节点(包括空白、换行等)。注意:它返回的是文本节点的集合,不是字符串拼接结果。
$x('//div//text()')
实际使用中,常需排除仅含空白符的节点,可用 normalize-space() 配合布尔判断:
//*/text()[normalize-space()] —— 只选内容经去首尾空格、压缩中间空白后非空的文本节点//text()[string-length(normalize-space()) > 0]
\n hello
\n 中的换行符文本节点XPath 本身不提供字符串拼接函数(XPath 1.0 无 string-join()),所以“并集”若指拼成一个字符串,需外部处理:
string-join(//*/text()[normalize-space()], '')
[t.strip() for t in tree.xpath('//*/text()') if t.strip()]''.join(...) 拼接基本上就这些。记住核心是 //text(),其余都是围绕它做
清洗或后续整合。