具有identic属性值的XQuery节点

时间:2016-09-15 07:21:59

标签: xml xpath distinct xquery

我有一个以下结构的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

1 个答案:

答案 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>
相关问题