Dataweave 2.0 - 如何将额外的 XML 元素注入到现有的 XML 结构中
Dataweave 2.0 - How to inject an additional XML element in to an existing XML structure
我正在尝试找出如何在 dataweave 中执行此操作,但运气不佳。
是否有一种无需再次重建 XML 结构即可完成此操作的优雅方法?
给定以下源和目标示例,您将如何仅将新元素注入第一个 UserArea/PropertyList?
新元素:
<Property>
<NameValue name="new.attribute">new value</NameValue>
</Property>
源结构
<?xml version="1.0" encoding="UTF-8"?>
<root>
<UserArea>
<PropertyList>
<Property>
<NameValue name="xxx.CreatedBy">Test 1</NameValue>
</Property>
<Property>
<NameValue name="xxx.EnteredBy">Test 2</NameValue>
</Property>
<Property>
<NameValue name="xxx.SafetyFlag">false</NameValue>
</Property>
<Property>
<NameValue name="xxx.DependFlag">true</NameValue>
</Property>
<Property>
<NameValue name="eam.UDFCHAR10">ABC</NameValue>
</Property>
</PropertyList>
</UserArea>
<UserArea>
<PropertyList>
<Property>
<NameValue name="xxx.Exited">Test 3</NameValue>
</Property>
<Property>
<NameValue name="xxx.Entered">Test 4</NameValue>
</Property>
<Property>
<NameValue name="xxx.SafetyFlag">false</NameValue>
</Property>
<Property>
<NameValue name="xxx.DependFlag">true</NameValue>
</Property>
<Property>
<NameValue name="eam.UDFCHAR10">ABC</NameValue>
</Property>
</PropertyList>
</UserArea>
</root>
目标结构
<?xml version="1.0" encoding="UTF-8"?>
<root>
<UserArea>
<PropertyList>
<Property>
<NameValue name="xxx.CreatedBy">Test 1</NameValue>
</Property>
<Property>
<NameValue name="xxx.EnteredBy">Test 2</NameValue>
</Property>
<Property>
<NameValue name="xxx.SafetyFlag">false</NameValue>
</Property>
<Property>
<NameValue name="xxx.DependFlag">true</NameValue>
</Property>
<Property>
<NameValue name="xxx.UDFCHAR10">ABC</NameValue>
</Property>
<Property>
<NameValue name="new.attribute">new value</NameValue>
</Property>
</PropertyList>
</UserArea>
<UserArea>
<PropertyList>
<Property>
<NameValue name="xxx.Exited">Test 3</NameValue>
</Property>
<Property>
<NameValue name="xxx.Entered">Test 4</NameValue>
</Property>
<Property>
<NameValue name="xxx.SafetyFlag">false</NameValue>
</Property>
<Property>
<NameValue name="xxx.DependFlag">true</NameValue>
</Property>
<Property>
<NameValue name="xxx.UDFCHAR10">ABC</NameValue>
</Property>
</PropertyList>
</UserArea>
</root>
您认为这是重建 xml 结构还是您的意思是在 DW 脚本中手工制作每个元素
输入
正如问题中给出的
脚本
%dw 2.0
output application/xml
var newElementAdded = {"NameValue" @(name:"new.attribute"): "new value"}
---
root: (payload.root mapObject {
UserArea: (if(($$$) == 0) "PropertyList": $.PropertyList ++ {"Property": newElementAdded} else $)
})
输出
<?xml version='1.0' encoding='UTF-8'?>
<root>
<UserArea>
<PropertyList>
<Property>
<NameValue name="xxx.CreatedBy">Test 1</NameValue>
</Property>
<Property>
<NameValue name="xxx.EnteredBy">Test 2</NameValue>
</Property>
<Property>
<NameValue name="xxx.SafetyFlag">false</NameValue>
</Property>
<Property>
<NameValue name="xxx.DependFlag">true</NameValue>
</Property>
<Property>
<NameValue name="eam.UDFCHAR10">ABC</NameValue>
</Property>
<Property>
<NameValue name="new.attribute">new value</NameValue>
</Property>
</PropertyList>
</UserArea>
<UserArea>
<PropertyList>
<Property>
<NameValue name="xxx.Exited">Test 3</NameValue>
</Property>
<Property>
<NameValue name="xxx.Entered">Test 4</NameValue>
</Property>
<Property>
<NameValue name="xxx.SafetyFlag">false</NameValue>
</Property>
<Property>
<NameValue name="xxx.DependFlag">true</NameValue>
</Property>
<Property>
<NameValue name="eam.UDFCHAR10">ABC</NameValue>
</Property>
</PropertyList>
</UserArea>
</root>
我正在尝试找出如何在 dataweave 中执行此操作,但运气不佳。
是否有一种无需再次重建 XML 结构即可完成此操作的优雅方法?
给定以下源和目标示例,您将如何仅将新元素注入第一个 UserArea/PropertyList?
新元素:
<Property>
<NameValue name="new.attribute">new value</NameValue>
</Property>
源结构
<?xml version="1.0" encoding="UTF-8"?>
<root>
<UserArea>
<PropertyList>
<Property>
<NameValue name="xxx.CreatedBy">Test 1</NameValue>
</Property>
<Property>
<NameValue name="xxx.EnteredBy">Test 2</NameValue>
</Property>
<Property>
<NameValue name="xxx.SafetyFlag">false</NameValue>
</Property>
<Property>
<NameValue name="xxx.DependFlag">true</NameValue>
</Property>
<Property>
<NameValue name="eam.UDFCHAR10">ABC</NameValue>
</Property>
</PropertyList>
</UserArea>
<UserArea>
<PropertyList>
<Property>
<NameValue name="xxx.Exited">Test 3</NameValue>
</Property>
<Property>
<NameValue name="xxx.Entered">Test 4</NameValue>
</Property>
<Property>
<NameValue name="xxx.SafetyFlag">false</NameValue>
</Property>
<Property>
<NameValue name="xxx.DependFlag">true</NameValue>
</Property>
<Property>
<NameValue name="eam.UDFCHAR10">ABC</NameValue>
</Property>
</PropertyList>
</UserArea>
</root>
目标结构
<?xml version="1.0" encoding="UTF-8"?>
<root>
<UserArea>
<PropertyList>
<Property>
<NameValue name="xxx.CreatedBy">Test 1</NameValue>
</Property>
<Property>
<NameValue name="xxx.EnteredBy">Test 2</NameValue>
</Property>
<Property>
<NameValue name="xxx.SafetyFlag">false</NameValue>
</Property>
<Property>
<NameValue name="xxx.DependFlag">true</NameValue>
</Property>
<Property>
<NameValue name="xxx.UDFCHAR10">ABC</NameValue>
</Property>
<Property>
<NameValue name="new.attribute">new value</NameValue>
</Property>
</PropertyList>
</UserArea>
<UserArea>
<PropertyList>
<Property>
<NameValue name="xxx.Exited">Test 3</NameValue>
</Property>
<Property>
<NameValue name="xxx.Entered">Test 4</NameValue>
</Property>
<Property>
<NameValue name="xxx.SafetyFlag">false</NameValue>
</Property>
<Property>
<NameValue name="xxx.DependFlag">true</NameValue>
</Property>
<Property>
<NameValue name="xxx.UDFCHAR10">ABC</NameValue>
</Property>
</PropertyList>
</UserArea>
</root>
您认为这是重建 xml 结构还是您的意思是在 DW 脚本中手工制作每个元素
输入 正如问题中给出的
脚本
%dw 2.0
output application/xml
var newElementAdded = {"NameValue" @(name:"new.attribute"): "new value"}
---
root: (payload.root mapObject {
UserArea: (if(($$$) == 0) "PropertyList": $.PropertyList ++ {"Property": newElementAdded} else $)
})
输出
<?xml version='1.0' encoding='UTF-8'?>
<root>
<UserArea>
<PropertyList>
<Property>
<NameValue name="xxx.CreatedBy">Test 1</NameValue>
</Property>
<Property>
<NameValue name="xxx.EnteredBy">Test 2</NameValue>
</Property>
<Property>
<NameValue name="xxx.SafetyFlag">false</NameValue>
</Property>
<Property>
<NameValue name="xxx.DependFlag">true</NameValue>
</Property>
<Property>
<NameValue name="eam.UDFCHAR10">ABC</NameValue>
</Property>
<Property>
<NameValue name="new.attribute">new value</NameValue>
</Property>
</PropertyList>
</UserArea>
<UserArea>
<PropertyList>
<Property>
<NameValue name="xxx.Exited">Test 3</NameValue>
</Property>
<Property>
<NameValue name="xxx.Entered">Test 4</NameValue>
</Property>
<Property>
<NameValue name="xxx.SafetyFlag">false</NameValue>
</Property>
<Property>
<NameValue name="xxx.DependFlag">true</NameValue>
</Property>
<Property>
<NameValue name="eam.UDFCHAR10">ABC</NameValue>
</Property>
</PropertyList>
</UserArea>
</root>