2015-09-29 53 views
0

比方說,我們有一個文件resturants.xml它看起來像XQuery中,在子孫計數值發生

<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> 

,我們要返回2個或更多的餐廳工作的廚師的名字和名稱這些resturants,該XQuery代碼將如何?

我一直在使用

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

嘗試,但似乎有至少2名廚師使用相同的名稱返回RESTURANT的名稱。任何幫助將不勝感激!

回答

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 
    } 
    } 
+0

我的天啊,謝謝!元素標籤的榮譽,不知道它,但它肯定會派上用場:) –