Dataweave 2.0—如何在现有XML结构中注入额外的XML元素



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

相关内容

  • 没有找到相关文章