我很难理解如何使用嵌套的FLWOR表达式和group。这里有一个XML文档示例,以及我想要做的事情。
<review>
<critic name="Critic1">
<book>
<name>ABC</name>
<rating>6</rating>
</book>
<book>
<name>Monsters</name>
<rating>2</rating>
</book>
<book>
<name>Spring Poems</name>
<rating>5</rating>
</book>
</critic>
<critic name="Critic2">
<book>
<name>ABC</name>
<rating>2</rating>
</book>
<book>
<name>Cooking101</name>
<rating>7</rating>
</book>
<book>
<name>Aliens?</name>
<rating>10</rating>
</book>
</critic>
</review>基本上,我要做的是按每本书的名字把数据分组,然后在每本书下面展示每一位评论它的评论家,以及他们给那本书的分数。
到目前为止,我的疑问是
for $books in doc("reviews.xml")/review/critic/book
let $critics := doc("reviews.xml")/review/critic
let $d := $books/name
group by $d
order by $d
return <book name="{$d}">{
for $hasReview in $critics
where $critics/book/name = $d
group by $n := $d
return <critic name="{$critics/@name}" rating="
{$critics/book[name=$d]/rating}"/>
}</book>此查询的输出如下所示
<book name ="ABC">
<critic name = "Critic1 Critic2" rating="6 2"/>
</book>
<book name ="Monsters">
<critic name = "Critic1 Critic2" rating="2"/>
</book>
<book name ="Spring Poems">
<critic name = "Critic1 Critic2" rating="5"/>
</book>
<book name ="Cooking101">
<critic name = "Critic1 Critic2" rating="7"/>
</book>
<book name ="Aliens">
<critic name = "Critic1 Critic2" rating="10"/>
</book>我试图获得的输出类似于以下内容:
<book name ="ABC">
<critic name = "Critic1" rating="6"/>
<critic name = "Critic2" rating="2"/>
</book>
<book name ="Monsters">
<critic name = "Critic1" rating="2"/>
</book>
<book name ="Spring Poems">
<critic name = "Critic1" rating="5"/>
</book>
<book name ="Cooking101">
<critic name = "Critic2" rating="7"/>
</book>
<book name ="Aliens">
<critic name = "Critic2" rating="10"/>
</book>发布于 2017-05-05 22:13:55
我还没有使用组,因为我从未使用过任何支持它的软件。所以我想这样说:
for $bookName in distinct-values(doc("reviews.xml")/review/critic/book/name)
order by $bookName
return <book name="{$bookName}">{
for $critic in doc("reviews.xml")/review/critic/book[name eq $bookName]
return <critic name="{$critic/../@name}" rating="{$critic/rating}" />
}</book>在对样本数据进行测试时,我得到了以下结果:
<book name="ABC">
<critic name="Critic1" rating="6"/>
<critic name="Critic2" rating="2"/>
</book>
<book name="Aliens?">
<critic name="Critic2" rating="10"/>
</book>
<book name="Cooking101">
<critic name="Critic2" rating="7"/>
</book>
<book name="Monsters">
<critic name="Critic1" rating="2"/>
</book>
<book name="Spring Poems">
<critic name="Critic1" rating="5"/>
</book>你甚至不确定你在这里找的是什么。通过查看您的输出,它似乎奇怪地将两个评论家节点的属性合并到一个属性中(这可能正是它应该做的事情,但不是您所需要的)。
https://stackoverflow.com/questions/43814162
复制相似问题