Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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 如何检查多个相同元素的列表是否使用属性标记了另一个列表的所有元素_Xml_Xquery - Fatal编程技术网

Xml 如何检查多个相同元素的列表是否使用属性标记了另一个列表的所有元素

Xml 如何检查多个相同元素的列表是否使用属性标记了另一个列表的所有元素,xml,xquery,Xml,Xquery,如何检查“人员”是否拥有“车辆标签”中属性状态为ON的所有“车辆” <deluxe person="John" brand="Mercedes"> <deluxe person="John" brand="Lamborgini"> <deluxe person="John" brand="Seat"> <deluxe person="Tyson" brand="Volva"> <deluxe person="Miles"

如何检查“人员”是否拥有“车辆标签”中属性状态为ON的所有“车辆”

<deluxe person="John"    brand="Mercedes">
<deluxe person="John"    brand="Lamborgini">
<deluxe person="John"    brand="Seat">
<deluxe person="Tyson"   brand="Volva">
<deluxe person="Miles"   brand="Wolkswagen">

以下是车辆列表:

<vehicule>
<car status="on">
<brand>Mercedes</brand>
</car>

<car status="off">
<brand>Peugeot</brand>
</car>

<car status="on">
<brand>Lamborgini</brand>
</car>

<car status="on">
<brand>Seat</brand>
</car>
</vehicules>

梅赛德斯
法国标致汽车
兰博基尼
座位
结果将是它返回元素

我从24小时以来就一直坚持这一点。

我确信有更有效的方法来做到这一点……但我并不完全确定你在问什么,但我怀疑这会对你有所帮助

let $v :=
<vehicule>
<car status="on">
<brand>Mercedes</brand>
</car>

<car status="off">
<brand>Peugeot</brand>
</car>

<car status="on">
<brand>Lamborgini</brand>
</car>

<car status="on">
<brand>Seat</brand>
</car>
</vehicule> 
let $p := <d>
<deluxe person="John"    brand="Mercedes"/>
<deluxe person="John"    brand="Lamborgini"/>
<deluxe person="John"    brand="Seat"/>
<deluxe person="Tyson"   brand="Volva"/>
<deluxe person="Miles"   brand="Wolkswagen"/>
</d>

let $all := for $i in $v/car[@status="on"]/brand/string() order by $i return $i


for $person in distinct-values($p/deluxe/@person)

  let $brands := for $i in $p/deluxe[@person=$person]/@brand/string() order by $i return $i

  return if ($brands eq $all) then
      $person
  else  
      ()
让$v:=
梅赛德斯
法国标致汽车
兰博基尼
座位
let$p:=
让$all:=对于$v/car中的$i[@status=“on”]/brand/string()订单按$i返回$i
对于不同值的$person($p/deluxe/@person)
让$brands:=对于$p中的$i/豪华[@person=$person]/@brand/string()订单按$i返回$i
如果返回($brands eq$all),则返回
$person
其他的
()
如果您能够使用,您可以隐式地执行内部循环;查询的读取相当自然

让$vehicleues:=
让$人:=
对于具有不同值的$person($persons/@person)
哪里
$Vehicleus/car中的每辆$car[@status='on']
满足$car/品牌=$persons/豪华[@person=$person]/@brand
返回$person

注意:您不能在序列上使用
eq
。请使用
count($brands[.=$all])eq count($all)
而不是
$brands eq$all
。Eric,恐怕您已经被ML函数映射咬了一口。您尝试了什么?如果您在这方面坚持了一天,您至少应该能够提供一些东西。