【问题标题】:unable to find pair of same liking in xml document无法在 xml 文档中找到相同的喜好
【发布时间】:2014-03-29 18:56:20
【问题描述】:

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

我做了很多努力,在上面使用 FLOWR 的 xml 文档中找到了一对喜欢相同奶酪的人。 但是我无法逻辑,请帮助我逻辑找到喜欢相同奶酪的配对人,配对不应该重复。

【问题讨论】:

  • Leos Literak 我不需要尝试任何选项

标签: xml xquery


【解决方案1】:

再次只是一个草图,因为这有一种(俗气的)编程作业的味道:

  • 您想按奶酪类型查找配对,因此请遍历不同种类的奶酪。
  • 为每种奶酪找到一个喜欢它的人。
  • 并为每个人找到一个也喜欢它的关注者。

通过只查找以下人员,您将防止重复。


更新:发布您的尝试后:

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
  • 最后,当然,您需要返回两个名称。

【讨论】:

  • for $x in doc("cheese.xml")/cheeseEaters/cheese for $y in doc("cheese.xml")/cheeseEaters/like[@cheese = $x/@name] for $z in $y[@cheese = $y/@cheese] 我正在使用这三个循环来找到喜欢微笑的奶酪,但我认为 .?
  • 我找到了喜欢奶酪的人的列表,但是如何将相似的人放在一起,因为当我使用第三个 for 循环遍历奶酪喜欢的列表时,我发现它给了我错误的答案。
  • 已经更新了我的答案。一般提示:在 cmets 中发布代码通常不是最好的方法,因为它几乎不可读。最好改为编辑问题。如果有问题,还要描述出了什么问题:错误的输出和预期的输出。向我们展示您的尝试和您关心的内容,您通常会在短时间内收到解决问题的确切解决方案(并且赞成而不是反对,这里的社区真的希望看到一些自己的努力问!)。
  • Jens Erat 我的问题解决了。你做了很大的帮助也谢谢我为你的帖子学到了很多东西
  • 很高兴听到这个消息。如果是这样,您可能希望选择已接受的答案。看看FAQ
猜你喜欢
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 2021-02-18
相关资源
最近更新 更多