我的XML如下:
<Root>
<Inv><Id>1</Id><Name>John</Name></Inv>
<Inv><Id>2</Id><Name>Tom</Name></Inv>
<Inv><Id>1</Id><Name>John</Name></Inv>
<Inv><Id>4</Id><Name>Harry</Name></Inv>
</Root>
想要使用XQUERY仅检索唯一的节点。
你能指导一下吗?
答案 0 :(得分:1)
以下XQuery通过对<Inv>
元素序列进行deep-equal()
比较来生成<Inv>
元素的独特列表:
let $invSequence := /Root/Inv
(:
For each position(),
return the <inv> element who's position is equal to the current number,
and who's previous siblings are not deep-equal()
:)
for $pos in (1 to count($invSequence))
return $invSequence[$pos]
[not(some $inv in $invSequence[position() < $pos]
satisfies deep-equal(., $inv))]
结果:
<Inv>
<Id>1</Id>
<Name>John</Name>
</Inv>
<Inv>
<Id>2</Id>
<Name>Tom</Name>
</Inv>
<Inv>
<Id>4</Id>
<Name>Harry</Name>
</Inv>
答案 1 :(得分:0)
如果你知道结构并且只有<Id>
和<Name>
的两个子元素,那么你可以按这些元素分组并从组中选择第一个元素:
for $inv in /Root/Inv
let $id := $inv/Id
let $name := $inv/Name
group by $id, $name
return $inv[1]