2014-03-29 27 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的上升行动,这里的社区真的希望看到自己的努力)。 –

相关问题