首页 文章

需要XPath和XQuery查询

提问于
浏览
0

我正在使用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 值获取 ScoreIdentifier 的值 . 我目前正在尝试以下查询,但没有按预期工作

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

我正在寻找的输出就是这个

qwerty-0,xyz-0

1 回答

  • 1

    您的问题通常表明对XQuery的一些基本误解 . 在单个答案中很难解释所有内容,但1)这不是 distinct-values 如何工作(它返回字符串值,而不是节点),以及2)return语句中的双斜杠选择返回所有内容,因为它们不受任何约束 . 但是,在 distinct-values 调用中使用的XPath非常接近 .

    您可以将该XPath的 Analysis 结果分配给变量,迭代它们并生成连接字符串,而不是调用 distinct-values . 然后使用 string-join 以逗号分隔整个序列 . 请注意,在return语句中,变量 $a 一次仅用于 concat 一对值 .

    string-join(
      let $analyses := FilterResults/FilterResult/Analysis[Name="XXXX"]
      for $a in $analyses
      return $a/concat(Identifier, '-', Score),
      ',')
    

    => qwerty-0,xyz-0

相关问题