我正在使用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 值获取 Score 和 Identifier 的值 . 我目前正在尝试以下查询,但没有按预期工作
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 回答
您的问题通常表明对XQuery的一些基本误解 . 在单个答案中很难解释所有内容,但1)这不是
distinct-values
如何工作(它返回字符串值,而不是节点),以及2)return语句中的双斜杠选择返回所有内容,因为它们不受任何约束 . 但是,在distinct-values
调用中使用的XPath非常接近 .您可以将该XPath的
Analysis
结果分配给变量,迭代它们并生成连接字符串,而不是调用distinct-values
. 然后使用string-join
以逗号分隔整个序列 . 请注意,在return语句中,变量$a
一次仅用于concat
一对值 .=>
qwerty-0,xyz-0