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

如何用单个XPath查询获取父节点与子节点值的元组?

单个XPath查询实现分类-动物元组的方案

当然可以用单条XPath查询搞定这个需求!不过具体写法得看你用的是XPath 1.0还是2.0及以上版本(不同版本支持的语法差异不小),咱们结合你的XML示例来拆解:

首先先把你的XML示例贴出来方便对照:

<animals>
  <mammals>
    <an>dog</an>
    <an>cat</an>
  </mammals>
  <reptiles>
    <an>snake</an>
  </reptiles>
</animals>

XPath 2.0+ 方案(推荐,支持结构化输出)

如果你的环境支持XPath 2.0或更高版本(比如XQuery、Saxon处理器、现代XML编辑器插件等),可以直接用for表达式生成结构化的元组序列:

for $an in //an return (local-name($an/parent::*), $an/text())

这条查询的逻辑很简单:

  • 遍历所有<an>元素(//an)
  • 对每个<an>,先取它父元素的本地名称(也就是mammals或reptiles),再取它的文本内容(动物名称)
  • 把这两个值组合成一个二元组返回

如果你的工具支持更明确的元组语法(比如某些XQuery环境),还可以写成带键名的形式,可读性更好:

for $an in //an return tuple(category := local-name($an/parent::*), animal := $an/text())

执行后会直接得到类似(category: "mammals", animal: "dog")这样的结构化元组。

XPath 1.0 方案(兼容旧环境)

要是你只能用XPath 1.0(比如原生浏览器DOM、旧版XML解析库),因为1.0不支持返回多值元组或序列,咱们可以退而求其次,生成拼接好的字符串,之后再拆分:

//an/concat(local-name(parent::*), ',', text())

这条查询会返回三个字符串结果:

  • mammals,dog
  • mammals,cat
  • reptiles,snake
    虽然不是严格的元组,但用逗号拆分后就能得到你想要的配对,完全满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:18:34