Исключая элементы в XQuery - PullRequest
       38

Исключая элементы в XQuery

3 голосов
/ 26 сентября 2011

У меня есть элемент 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>

Что мне нужно сделать, так это перебрать этот элемент и вытащить ТОЛЬКО первые элементы элемента с отдельным элементом размера. Поэтому я хочу иметь:

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

Удаление второго элемента item размером 360. Есть ли способ отфильтровать их в операторе for for filter?

Ответы [ 2 ]

3 голосов
/ 26 сентября 2011

Один из способов:

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]]
0 голосов
/ 26 сентября 2011

Помогает ли следующий запрос?

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