変更が必要な XML ファイルがあります。まず、group by を実行してから、いくつかのノードを除外する必要があります。
<cars>
<car>
<make>Toyota</make>
<model>Camry</model>
<color>White</color>
<price>123</price>
</car>
<car>
<make>Honda</make>
<model>Accord</model>
<color>White</color>
<price>423</price>
</car>
</cars>
変換を行う私のコードは次のとおりです。
<root>
{
for $color in distinct-values(doc('cars.xml')//cars/car/color)
let $car := doc('cars.xml')//cars/car
return <appearance color="{$color}">
{ $car[color eq $color ] }
</appearance>
}
</root>
私は得る:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<appearance color="White">
<car>
<make>Toyota</make>
<model>Camry</model>
<color>White</color>
<price>123</price>
</car>
<car>
<make>Honda</make>
<model>Accord</model>
<color>White</color>
<price>423</price>
</car>
</appearance>
</root>
これは、1 つの問題を除いて、私が必要とすることの 95% を行います。グループ化を維持しながら、最終的な XML からノード「color」と「price」を除外する必要があります。
returnステートメントで次のことを試みました: { $car[color eq $color ]/*[not(self::price)][not(self::color)] }
動作しますが、「車」要素を完全に排除します!! 何かアドバイス?