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 将每个街道元素放入出站中的特定 DA 元素XML?
我尝试使用 * 通配符 (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 格式中。从这一点开始我们可以依次解决这个问题:
- 从这个表达式开始
payload.Address.*Street
我们将得到一个街道列表。
- 但是在当前的DataWeave表达式中直接使用会报错。因此将该表达式包裹在方括号内:
(payload.Address.*Street)
使其成为对象而不是数组。
- 现在我们只需要将Street标签重命名为对应的DA(n)。因此我们可以利用 map 运算符来迭代每条记录,并使用 brackets 或 quote marks,
() or '' or ""
包含输出的键:
("DA" ++ $$ + 1)
或 "DA$($$ + 1)"
都同样返回相同的结果:DA1、DA2、DA3、...
因此,该字段的完整表达式应为:(payload.Address.*Street map { ("DA" ++ $$ + 1): $ })
基于我刚刚在下面复制的 Suthony 输入,您可以找到 dwl 脚本
%dw 1.0
%输出application/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
}
}
- 使用地图遍历 Street 元素
("DA" ++ $$+1)
打印DA1、DA2等。
输入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 将每个街道元素放入出站中的特定 DA 元素XML?
我尝试使用 * 通配符 (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 格式中。从这一点开始我们可以依次解决这个问题:
- 从这个表达式开始
payload.Address.*Street
我们将得到一个街道列表。 - 但是在当前的DataWeave表达式中直接使用会报错。因此将该表达式包裹在方括号内:
(payload.Address.*Street)
使其成为对象而不是数组。 - 现在我们只需要将Street标签重命名为对应的DA(n)。因此我们可以利用 map 运算符来迭代每条记录,并使用 brackets 或 quote marks,
() or '' or ""
包含输出的键:
("DA" ++ $$ + 1)
或 "DA$($$ + 1)"
都同样返回相同的结果:DA1、DA2、DA3、...
因此,该字段的完整表达式应为:(payload.Address.*Street map { ("DA" ++ $$ + 1): $ })
基于我刚刚在下面复制的 Suthony 输入,您可以找到 dwl 脚本
%dw 1.0
%输出application/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
}
}
- 使用地图遍历 Street 元素
("DA" ++ $$+1)
打印DA1、DA2等。