繁体   English   中英

Xquery 3.0按属性值分组

[英]Xquery 3.0 group by attribute value

在学习Xquery和Xpath的冒险中,我遇到了一个问题,试图将苹果与它们的类别进行分组。

我在文档中使用XPath 3.0XML 1.0

我有这个:

<fruits>

    <fruit>
        <name>Apple</name>
        <category>Summer</category>
    </fruit>

    <fruit>
        <name>Mondarine</name>
        <category>Autumm</category>
    </fruit>

    <fruit>

        <name>Kiwi</name>
        <category>Summer</category>
    </fruit>

    <fruit>
        <name>Aguacate</name>
        <category>Winter</category>
    </fruit>

    <fruit>
        <name>Banana</name>
        <category>Winter</category>
    </fruit>

</fruits>

我需要下一个输出:

<summary>
<category = "Summer"/>
<item list-names = "Apple, Kiwi"/>
</summary>

<summary>
<category = "Autumm"/>
<item list-names = "Mondarine"/>
</summary>

<summary>
<category = "Winter"/>
<item list-names = "Aguacate, Banana"/>
</summary>

如何使用XQuery做到这一点?

可能很容易,但是我还没有看到,我正在努力解决这个问题。 谢谢您的帮助!

您可以在XQuery中解决此问题,方法是遍历类别名称的不同值,然后使用XPath查询与类别匹配的项目名称:

for $category in distinct-values($fruits/fruit/category)
let $items := $fruits/fruit[category = $category]/name
return 
  <summary>
    <category>{ $category }</category>
    <item list-names="{ string-join($items, ', ') }"/>  
  </summary>

请注意,您的示例输出不是有效的XML:

<category = "Summer"/>

您可以使用以下属性来存储该值:

<summary category="Summer"> ...
<category value="Summer"/> ...

或在一个元素中,这就是我为此选择的答案:

<summary>
  <category>Summer</category>
  <item list-names="Apple, Kiwi"/>
</summary>
<summary>
  <category>Autumm</category>
  <item list-names="Mondarine"/>
</summary>
<summary>
  <category>Winter</category>
  <item list-names="Aguacate, Banana"/>
</summary>

正如您的主题行提到XQuery 3.0一样,您也可以使用group by

for $fruit in fruits/fruit
group by $cat := $fruit/category
return <summary>
  <category>{$cat}</category>
  <items list="{string-join($fruit/name, ', ')}"/>
</summary>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM