我有如下 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 检索唯一节点。
你能指导一下吗?
我有如下 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 检索唯一节点。
你能指导一下吗?
以下 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>
如果您知道结构并且只有两个子元素<Id>
and <Name>
,那么您可以按这些元素分组并从组中选择第一个:
for $inv in /Root/Inv
let $id := $inv/Id
let $name := $inv/Name
group by $id, $name
return $inv[1]