1

我有如下 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 检索唯一节点。

你能指导一下吗?

4

2 回答 2

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>
于 2013-02-17T19:56:10.623 回答
0

如果您知道结构并且只有两个子元素<Id>and <Name>,那么您可以按这些元素分组并从组中选择第一个:

for $inv in /Root/Inv
  let $id := $inv/Id
  let $name := $inv/Name
  group by $id, $name
return $inv[1]
于 2013-02-18T01:52:55.337 回答