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

如何用XPath/XQuery根据Name节点值获取Score和Identifier节点值

XPath/XQuery查询:根据同级Name获取对应Score和Identifier值

我来帮你搞定这个XPath/XQuery的问题!先看你的XML结构:

<FilterResults> 
  <FilterResult> 
    <ID>535</ID> 
    <Analysis> 
      <Name>ZZZZ</Name> 
      <Identifier>asdfg</Identifier> 
      <Result>High</Result> 
      <Score>0</Score> 
    </Analysis> 
    <Analysis> 
      <Name>XXXX</Name> 
      <Identifier>qwerty</Identifier> 
      <Result>Medium</Result> 
      <Score>0</Score> 
    </Analysis> 
  </FilterResult> 
  <FilterResult> 
    <ID>745</ID> 
    <Analysis> 
      <Name>XXXX</Name> 
      <Identifier>xyz</Identifier> 
      <Result>Critical</Result> 
      <Score>0</Score> 
    </Analysis> 
    <Analysis> 
      <Name>YYYY</Name> 
      <Identifier>qwerty</Identifier> 
      <Result>Medium</Result> 
      <Score>0</Score> 
    </Analysis> 
  </FilterResult> 
</FilterResults>

你的需求很明确:基于Name节点的值(这里是"XXXX"),获取对应的Identifier和Score值,把每一组用-连接,多组结果用,分隔,最终得到qwerty-0,xyz-0这样的输出。

问题出在哪?

你之前的查询有两个关键问题:

  • 使用//Identifier和//Score会全局查找所有对应的节点,而不是当前匹配的Analysis节点下的子节点,这会导致结果混乱;
  • fn:distinct-values在这里完全没必要,你需要的是每个符合条件的Analysis下的对应值,不是去重后的结果。

正确的查询语句

试试这个XQuery:

fn:string-join(
  for $analysis in FilterResults/FilterResult/Analysis[Name="XXXX"]
  return fn:string-join(($analysis/Identifier/text(), $analysis/Score/text()), '-'),
  ','
)

解释一下逻辑

  1. 首先遍历所有Name等于"XXXX"的Analysis节点,把每个节点赋值给变量$analysis;
  2. 对每个$analysis,取出它自身的Identifier和Score的文本值,用-拼接成一组;
  3. 最后把所有拼接好的组用,连接起来,正好得到你想要的输出。

运行这个查询后,输出就是你期望的:qwerty-0,xyz-0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:20:28