繁体   English   中英

Mule Dataweave将XML元素重复为单独命名的XML元素

[英]Mule Dataweave Repeating XML Elements to Individually Named XML Elements

输入XML

<Address>
    <Street>Street Line 1</Street>
    <Street>Street Line 2</Street>
    <Street>Street Line 3</Street>
    <City>City</City>
    <Postcode>0000</Postcode>
</Address>

需要输出XML

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

如何使用Dataweave将每个街道元素放入出站XML中的特定DA元素?

我尝试使用*通配符(Address。* 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格式的元素。 从这一点开始,我们可以顺序解决此问题:

  1. 从这个表达式payload.Address.*Street开始,我们将获得街道列表。
  2. 但是,如果我们直接在当前DataWeave表达式中使用它,则会发生错误。 因此,将表达式包装在方括号(payload.Address.*Street) ,使其成为对象而不是数组。
  3. 现在,我们只需要将Street标签重命名为对应的DA(n)即可 因此,我们可以利用map运算符来迭代每条记录,并使用方括号引号 () or '' or ""将输出的键括起来:

("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
    }
}
  1. 使用地图遍历Street元素
  2. ("DA" ++ $$+1)以打印DA1,DA2等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM