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

如何用XPath获取饮用wine或beer宾客的name属性值?

解决XPath筛选饮用wine/beer的guest姓名属性问题

先看你提供的XML示例:

<?xml version="1.0" encoding="UTF-8"?>
<party date="31.12.01">
  <guest name="Albert">
    <drink>wine</drink>
    <drink>beer</drink>
    <status single="true" sober="false" />
  </guest>
  <guest name="Martina">
    <drink>apple juice</drink>
    <status single="true" sober="true" />
  </guest>
  <guest name="Zacharias">
    <drink>wine</drink>
    <status single="false" sober="false" />
  </guest>
</party>

你之前写的表达式问题出在路径方向搞反了://guest/@name/drink这种写法是在找guest节点的name属性的子节点drink,但属性本身不是节点,根本没有子节点,所以自然得不到结果。

正确的XPath表达式

要筛选出饮用wine或beer的guest的name属性值,应该先定位到符合条件的guest节点,再提取它的name属性:

  1. 获取所有符合条件的name属性节点(适合批量结果):
//guest[drink[.="wine" or .="beer"]]/@name
  1. 如果只需要第一个匹配的属性值(转为字符串):
string(//guest[drink[.="wine" or .="beer"]]/@name)

简化写法

XPath里可以直接简化条件判断,不用嵌套drink[.],写成:

//guest[drink="wine" or drink="beer"]/@name

逻辑说明

这个表达式的核心是:

  • 先找到所有guest节点,要求该节点下存在值为wine或beer的drink子节点
  • 然后提取这些guest节点的name属性

用你的XML测试的话,会返回Albert和Zacharias的name属性值,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:22:40