我有一个以下结构的XML文档。
UNMET PEER DEPENDENCY rxjs@5.0.0-beta.12
npm WARN angular2-jwt@0.1.22 requires a peer of rxjs@5.0.0-beta.11
现在我想使用此代码显示所有使用XQuery的函数。
<Content>
<Function Name="A">
<SubNode1>
<SubNode2>
</SubNode2>
</SubNode1>
</Function>
<Function Name="B">
<SubNode1>
<SubNode2>
</SubNode2>
</SubNode1>
</Function>
<Function Name="A">
<SubNode1>
<SubNode2>
</SubNode2>
</SubNode1>
</Function>
这很好用。但我想只显示具有不同Name属性的函数。它应该只显示名称为A的函数和名称为B的函数,不应包含名称为A的最后一个函数。
我该怎么做?有什么建议? 我正在使用XQuery 1.0
答案 0 :(得分:1)
您可以使用group by
查找具有相同名称的功能:
for $func in /Content/Function
let $name := $func/@Name
group by $name
let $last-func := ($func/.)[last()]
return <Function Name="{$name}">{
local:printAttributes($last-func)
}</Function>
由于组内的订单未标准化,您需要在/.
中使用自我步骤$last-func
来对文档顺序中的元素进行排序。
在XQuery 1.0中,您可以使用group by
:
fn:distinct-values(...)
for $name in distinct-values(/Content/Function/@Name)
let $funcs := /Content/Function[@Name = $name]
let $last-func := $funcs[last()]
return <Function Name="{$name}">{
local:printAttributes($last-func)
}</Function>