xQuery组按类别输出

时间:2019-05-13 06:23:47

标签: xpath xquery

xQuery / xPath还有另一个小问题。对于我的作业,我需要按分支和产品类别输出产品范围,其中输出应仅包含具有每个类别(类别)产品(produkt和prodInSortiment)的那些分支(分支)。 有关XML数据,请参见代码中提供的URL。

虽然这给了我每个分支机构正确的产品数量,但我需要按产品类别进一步对其进行分组:

WillPopScope( 
    child: Scaffold(...), 
    onWillPop: () async {
                  return false;
    },
),

这是我将其进一步分组的方法,但是它会返回每个分支(子公司)中每个类别(类别)的每个产品:

declare context item := doc("https://etutor.dke.uni-linz.ac.at/etutor/XML?id=1");
let $filialen := //filiale,
    $sortiment := //prodInsortiment,
    $produkte := //produkt,
    $kategorien := distinct-values(//produkt/kategorie)

for $f in $filialen
    let $s := $f//prodInSortiment
    let $scat := distinct-values($produkte[@ean = $s/ean]/kategorie)
    let $filsort := $produkte[@ean = $s/ean]/@ean
    let $catcount := count($scat)
    where $catcount = count(distinct-values($kategorien))

return
<filiale filialeNr="{$f/@filNr}"> 
{for $fs in $filsort return <ean>{$fs}</ean>
}
</filiale>

结果应如下所示(这是子集“ 1”的正确输出):

declare context item := doc("https://etutor.dke.uni-linz.ac.at/etutor/XML?id=1");
let $filialen := //filiale,
    $sortiment := //prodInsortiment,
    $produkte := //produkt,
    $kategorien := distinct-values(//produkt/kategorie)

for $f in $filialen
    let $s := $f//prodInSortiment
    let $scat := distinct-values($produkte[@ean = $s/ean]/kategorie)
    let $filsort := $produkte[@ean = $s/ean]/@ean
    let $catcount := count($scat)
    where $catcount = count(distinct-values($kategorien))

return
<filiale filialeNr="{$f/@filNr}"> 
{for $cat in $scat return 
<prodGruppe val = "{$cat}">
{for $fs in $filsort return <ean>{$fs}</ean>
}
</prodGruppe>
}
</filiale>

由于即将进行期中考试,所以我不仅在寻求解决方案,我还对可能采用更简单的方法来获得正确的输出感兴趣。 预先感谢您提供任何有用的信息!

1 个答案:

答案 0 :(得分:0)

假设您拥有XQuery 3的group-by子句(https://www.w3.org/TR/xquery-31/#id-group-by),则可以将最后一个返回值重写为

return
<filiale filialeNr="{$f/@filNr}"> 
{
    for $prod in $s
    group by $cat := $produkte[@ean = $prod/ean]/kategorie
    return 
        <prodGruppe val = "{$cat}">
        {
            $prod/ean
        }
        </prodGruppe>
}
</filiale>

我想。