Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 排除XQuery中的元素_Xml_Filter_For Loop_Xquery - Fatal编程技术网

Xml 排除XQuery中的元素

Xml 排除XQuery中的元素,xml,filter,for-loop,xquery,Xml,Filter,For Loop,Xquery,我有一个XML元素,例如: <items> <item> <size>360</size> <quantity>400</quantity> <item> <item> <size>540</size> <quantity>1200</quantity> <item>

我有一个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>

360
400
540
1200
360
600
800
750
我需要做的是迭代这个元素,并只提取具有不同大小元素的第一个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
400
540
1200
800
750

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

下面的查询有帮助吗

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

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]
还有一种(更邪恶的)方式是


我相信这将排除所有大小为360的元素,而不仅仅是第2-N个元素。加上该值有时可能是360以外的值,目前尚不清楚。
$items[index-of($items/size, size)[1]]