2014-03-29 64 views
-2

無法找到對相同喜好的XML文檔中

<person name = "fred"/> 
<person name ="sue"/> 
<person name = "jill" /> 
<person name = "khan"/> 
<cheese name ="camembert"/> 
<cheese name="roquefort"/> 
<liking person="fred" cheese="camembert"/> 
<liking person="fred" cheese="roquefort"/> 
<liking person ="sue" cheese ="roquefort"/> 
<liking person ="jill" cheese = "camembert" /> 
<liking person ="khan" cheese = "camembert"/> 

我做了很多的努力,找到對的誰像上面XML文檔中相同的奶酪使用FLOWR人。 但是我無法做出邏輯能夠幫助我找到一個像一樣的奶酪一樣的人的邏輯,雙重不應該重複。

+1

你試過了什麼? –

+0

Leos Literak我需要在doc(「cheese.xml」)/ cheeseEaters/cheese for $ y in doc(「cheese.xml」)/ cheeseEaters /喜歡[@cheese = $ x的情況下嘗試購買 – Arshad

回答

2

同樣只是一個草圖,因爲這有編程作業的(俗氣)氣味:

  • 你想找到乾酪型對,所以遍歷不同種類的奶酪。
  • 對於每一個奶酪,找一個喜歡它的人。
  • 對於每個人,找到一個也喜歡它的人。

通過只查找下列人員,您將防止重複。


更新:在您發佈您的嘗試:

for $x in doc("cheese.xml")/cheeseEaters/cheese 
for $y in doc("cheese.xml")/cheeseEaters/liking[@cheese = $x/@name] 
for $z in $y[@cheese = $y/@cheese] 
return $z/@person 

因爲我覺得是足夠接近,這就是我所做的一切:

for $cheese in //cheese/@name 
for $person1 in //liking[@cheese=$cheese] 
for $person2 in $person1/following-sibling::liking[@cheese=$cheese] 
return element pair { 
    $person1/@person/data(), 
    $person2/@person/data() 
} 

它需要稍作修改加載數據你從哪裏得到它,但這對你來說很容易。對您的代碼的一些註釋:

  • 始終使用描述性變量名稱。 $x$y會在下次閱讀代碼時感到困惑,以及其他所有人都會看到它。
  • 圍繞奶酪種類和「第一」類似他們的人似乎是正確的。
  • 第三個for循環需要再次搜索整個數據集,您只是循環遍歷第二個循環的單個項目。並確保使用following-sibling
  • 最後,當然,你需要返回兩個名字。
+0

/@ name] for $ z in $ y [@cheese = $ y/@ cheese]我正在使用這三個循環來尋找smiler奶酪的喜好,但我認爲有些東西是錯誤的。 – Arshad

+0

我已經找到了奶酪喜歡的人的列表,但如何得到類似的相像一起,因爲當我使用第三循環在奶酪列表循環喜歡我發現它給了我錯誤的答案。 – Arshad

+0

已經更新了我的答案。一般提示:在評論中發佈代碼通常不是最好的方式,因爲它很難閱讀。相反,更好地編輯問題。如果有問題,還要描述出了什麼問題:錯誤的產出和預期的產出。向我們展示你的嘗試和你的關心,並且你通常會在短時間內收到你問題的確切解決方案(而不是downvotes的上升行動,這裏的社區真的希望看到自己的努力)。 –

相關問題