我有一个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>
Run Code Online (Sandbox Code Playgroud)
这是我执行转换的代码:
<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>
Run Code Online (Sandbox Code Playgroud)
我明白了:
<?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>
Run Code Online (Sandbox Code Playgroud)
除了一个问题,这需要我所需要的95%.我需要从最终的XML中排除节点"颜色"和"价格",同时保留分组.
我试图在我的回复声明中执行以下操作:{$ car [color eq $ color]/*[not(self :: price)] [not(self :: color)]}
有点作品,但它完全消除了"汽车"元素!有什么建议?
小智 5
试试这个:
<root>
{
let $cars-doc := doc('cars.xml')
let $color := distinct-values($cars-doc//cars/car/color)
return
for $carcolor in $color
return
<appearance color="{$carcolor}">
{
for $car in $cars-doc//cars/car
where $car/color = $carcolor
return
<car>
{$car/*[not(self::color or self::price)]}
</car>
}
</appearance>
}
</root>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
归档时间: |
|
查看次数: |
3198 次 |
最近记录: |