我有一个XML文件需要修改。首先,我需要按组进行分组,然后排除几个节点。
<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>
除了一个问题,这可以满足我95%的需求。我需要在保留分组的同时排除XML中的“color”和“price”节点。
我试图在返回语句中执行以下操作: { $car[color eq $color]/*[not(self::price)][not(self::color)] }
这种方法有点奏效,但它完全消除了“car”元素!有什么建议吗?