在XQuery中排除元素

时间:2011-09-26 15:26:55

标签: xml filter for-loop xquery

我有一个XML元素,例如:

<items>
   <item>
      <size>360</size>
      <quantity>400</quantity>
   <item>
   <item>
      <size>540</size>
      <quantity>1200</quantity>
   <item>
   <item>
      <size>360</size>
      <quantity>600</quantity>
   <item>
   <item>
      <size>800</size>
      <quantity>750</quantity>
   <item>
</items>

我需要做的是迭代这个元素并仅使用不同的size元素拉出第一个item元素。所以我希望:

<item>
  <size>360</size>
  <quantity>400</quantity>
<item>
<item>
   <size>540</size>
   <quantity>1200</quantity>
<item>
<item>
   <size>800</size>
   <quantity>750</quantity>
<item>

删除大小为360的第二个item元素。有没有办法在for循环过滤器语句中过滤掉这些?

2 个答案:

答案 0 :(得分:3)

一种方法是:

for $item in $items
where $item is $items[size = $item/size][1]
return $item

另一个是

let $sizes = distinct-values($items/size)
for $size in $sizes
return $items[size = $size][1]

而另一种(更邪恶的)方式是

$items[index-of($items/size, size)[1]]

答案 1 :(得分:-1)

以下查询是否有帮助?

for $item in $items
let $size := number($item/size/text()) 
return
  if($size != 360) then
    $item
  else ()