我正试图找出如何在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>