You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XPath提取h1后的零散文本失败,该如何获取目标完整文本?

解决XPath提取分散文本的问题

问题原因

你之前的//h1[@id='example']/following-sibling语法不完整,following-sibling必须指定节点类型(比如text()、node());而//h1[@id='example']/following-sibling::text()其实能匹配到目标文本节点,但可能因为文本包含引号、空白字符,或者工具显示问题导致你误以为没匹配到。

提取完整目标文本的方案

要拼接出My car is a Ferrari that goes 100 km/h,可以用以下几种方式:

方式1:一次性提取并合并所有后续节点的文本

使用XPath的string()函数,直接获取h1之后所有同级节点的合并文本:

string(//h1[@id='example']/following-sibling::node())

这个表达式会把h1之后的文本节点、abbr节点下的a标签文本全部合并,之后你只需要清理掉多余的引号和空白字符即可(比如去掉前后的双引号、换行和缩进)。

方式2:分节点提取后拼接

如果需要精准控制每个部分,可以分别提取各段文本再拼接:

  • 提取开头文本://h1[@id='example']/following-sibling::text()[1] → 拿到"My car is a "
  • 提取中间品牌文本://h1[@id='example']/following-sibling::abbr/a/text() → 拿到Ferrari
  • 提取结尾文本://h1[@id='example']/following-sibling::text()[2] → 拿到"that goes 100 km/h"
    之后将这三部分拼接,再去除多余的引号和空白字符,就能得到目标文本。

补充说明

如果你的XPath工具支持字符串处理,也可以直接在表达式里清理内容,比如用normalize-space()去除多余空白:

normalize-space(replace(string(//h1[@id='example']/following-sibling::node()), '"', ''))

这个表达式会先合并所有文本,去掉双引号,再去除多余的换行、缩进和空格,直接返回My car is a Ferrari that goes 100 km/h。

内容的提问来源于stack exchange,提问作者Rodolfo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:10:17