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