Xquery,计算后代中的值出现次数

时间:2015-09-29 16:02:22

标签: xml xquery

假设我们有文件resturants.xml,它看起来像

<restaurant>
   <name>Benny’s hamburgers</name>
   <chef>Benny</chef>
</restaurant>
<restaurant>
   <name>The Restaurant</name>
   <chef>Oliver</chef>
</restaurant>
<restaurant>
   <name>Italian’s</name>
   <chef>Oliver</chef>
</restaurant>
<restaurant>
   <name>La pasta</name>
   <chef>Oliver</chef>
</restaurant>

我们想要返回在两家或更多餐馆工作的厨师的名字以及这些餐馆的名称,XQuery代码将如何显示?

我尝试过使用

$xml = doc("resturants.xml")
for $restaurant in $xml/restaurant
   where count($restaurant/chef) >= 2
   return $restaurant/name

但这似乎返回了至少2名同名厨师的餐厅名称。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

XQuery不会自动为您加入数据。此外,从另一个方向考虑这类问题也很有帮助。由于您想要将厨师与多家餐厅相关联,您可以先获得独特的厨师名称,然后加入相关餐厅。

for $name in distinct-values($xml/restaurant/chef)
let $restaurants := $xml/restaurant[chef = $name]
where count($restaurants) >= 2
return 
  element chef {
    element name { $name },
    element restaurants {
      $restaurants/name
    }
  }