我有一个需要修改的 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 中排除节点“颜色”和“价格”,同时保留分组。
我尝试在我的退货声明中执行以下操作: { $car[color eq $color ]/*[not(self::price)][not(self::color)] }
有点作品,但它完全消除了“汽车”元素!有什么建议吗?