Mule Dataweave将重复的XML元素编织成单独命名的XML元素

Mule Dataweave将重复的XML元素编织成单独命名的XML元素,xml,mule,dataweave,Xml,Mule,Dataweave,输入XML 需要输出XML 如何使用Dataweave将每个street元素放到出站XML中的特定DA元素 我尝试使用*通配符地址。*Street,但这会将Street元素作为子元素: <DeliveryAddress> <DA1> <Street>Street 1</Street> <Street>Street 2</Street> <Street>Str

输入XML

需要输出XML

如何使用Dataweave将每个street元素放到出站XML中的特定DA元素

我尝试使用*通配符地址。*Street,但这会将Street元素作为子元素:

<DeliveryAddress>
    <DA1>
        <Street>Street 1</Street>
        <Street>Street 2</Street>
        <Street>Street 3</Street>
    </DA1>
    <City>City</City>
    <Postcode>0000</Postcode>
</DeliveryAddress>

请帮助^ ^

通配符用于引用重复的元素,尤其是XML格式的元素。从这一点开始,我们可以依次解决这个问题:

从这个表达式payload.Address.*Street开始,我们将得到一个Street列表。 但是,如果我们在当前DataWeave表达式中直接使用它,则会发生错误。因此,将该表达式包装在一个括号内:payload.Address.*Street,使其成为一个对象而不是数组。 现在我们只需要将街道标记重命名为对应的DAn。因此,我们可以利用map运算符迭代每个记录,并使用括号或引号,或将输出的键括起来: DA++$$+1或DA$$$+1都返回相同的结果:DA1、DA2、DA3


因此,这个字段的完整表达式应该是:payload.Address.*Street map{DA++$$+1:$}

基于我刚才在下面复制的Suthony输入,您可以找到dwl脚本

%dw 1.0
%输出应用程序/xml 送货地址:{

(payload.Address.*Street map { 
    ("DA" ++ $$ + 1): $
}),
    city:payload.Address.City,
    PostCode:payload.Address.Postcode
}

干杯

{
    DeliveryAddress: {
        (payload.Address.*Street map {
            ("DA" ++ $$ +1): $
        }),
        City: payload.Address.City,
        Postcode: payload.Address.Postcode
    }
}
使用地图在街道元素上迭代 DA++$$+1以打印DA1、DA2等。
谢谢你解释得这么好,它工作得很好!
(payload.Address.*Street map { 
    ("DA" ++ $$ + 1): $
}),
    city:payload.Address.City,
    PostCode:payload.Address.Postcode
{
    DeliveryAddress: {
        (payload.Address.*Street map {
            ("DA" ++ $$ +1): $
        }),
        City: payload.Address.City,
        Postcode: payload.Address.Postcode
    }
}