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

能否同时运行两条不同的XPath并捕获结果?

如何同时执行两条XPath并捕获返回值

当然可以实现,下面提供两种实用方案:

方案一:用XPath的联合运算符一次性查询

直接用|运算符把两条XPath合并成一个表达式,一次查询就能返回所有匹配的节点,再提取文本即可:

//div[text()='city']/following-sibling::div | //div[contains(text(),'state')]/following-sibling::div

这个表达式会按节点在HTML中的出现顺序返回结果,对应你的示例结构,会先拿到城市节点(London),再拿到州节点(England)。提取文本后就能得到对应的字符串值。

如果你的HTML里城市标签文本是大小写混合的(比如示例里的City),可以调整XPath来兼容大小写:

//div[lower(normalize-space(text()))='city']/following-sibling::div | //div[contains(lower(normalize-space(text())),'state')]/following-sibling::div

normalize-space用来去除文本前后的空白,lower()统一转小写,避免大小写不匹配的问题。

方案二:代码层面分别执行再组合

如果需要单独处理城市和州的结果(比如判断是否存在、做额外清洗),可以在代码里分别执行两条XPath,再把结果拼接成字符串。以Python的lxml库为例:

from lxml import etree

# 你的HTML内容
html_content = """
<div>
<div>City</div>
<div>London</div>
</div>
<!--In between some other elements like p, section other divs-->
<div>
<div>state</div>
<div>England</div>
</div>
"""

tree = etree.HTML(html_content)

# 提取城市(兼容大小写,用normalize-space和lower处理)
city_list = tree.xpath("//div[lower(normalize-space(text()))='city']/following-sibling::div/text()")
city = city_list[0] if city_list else "未知城市"

# 提取州
state_list = tree.xpath("//div[contains(lower(normalize-space(text())),'state')]/following-sibling::div/text()")
state = state_list[0] if state_list else "未知州"

# 组合成目标字符串
result_str = f"{city}, {state}"
print(result_str)  # 输出:London, England

这种方式更灵活,能应对节点缺失的情况,避免直接索引列表导致的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:45:30