%dw 2.0
output application/xml
---
{
Result: {
(payload.Names.*NameDetail map ( nameDetail , indexOfNameDetail ) -> {
TargetName @((nameDetail.@)): {
item: nameDetail.item
}
})
}
}
Pass XML Attributes
DataWeave enables you to pass attributes from within an XML tag input source to the target output XML. The DataWeave example shows how to pass the XML attributes in the NameDetail
field of the input source payload to the TargetName
field of the XML output.
This example uses:
- .*
multivalue selector that returns an array of NameDetail
elements.
- map
function to iterate over the array of NameDetail elements of the input.
- The dynamic attribute expression @dynamicAttributes
to create the attributes of the new output tag by selecting the attributes dynamically from the input.
<?xml version="1.0" encoding="UTF-8"?>
<Names>
<NameDetail NameId="11111" NameType="Person" Name="Richarson" GivenNames="John" PreferredLanguage="English" CompanyNumber="" Gender="Male" Title="" >
<item>doo</item>
</NameDetail>
<NameDetail NameId="22222" NameType="Person" Name="Richarson" GivenNames="Susan" PreferredLanguage="Spanish" CompanyNumber="" Gender="Female" Title="" >
<item>dah</item>
</NameDetail>
<NameDetail NameId="33333" NameType="Person" Name="Knox" GivenNames="Frances" PreferredLanguage="English" CompanyNumber="" Gender="Male" Title="" >
<item>dab</item>
</NameDetail>
</Names>
<?xml version='1.0' encoding='UTF-8'?>
<Result>
<TargetName NameId="11111" NameType="Person" Name="Richarson" GivenNames="John" PreferredLanguage="English" CompanyNumber="" Gender="Male" Title="">
<item>doo</item>
</TargetName>
<TargetName NameId="22222" NameType="Person" Name="Richarson" GivenNames="Susan" PreferredLanguage="Spanish" CompanyNumber="" Gender="Female" Title="">
<item>dah</item>
</TargetName>
<TargetName NameId="33333" NameType="Person" Name="Knox" GivenNames="Frances" PreferredLanguage="English" CompanyNumber="" Gender="Male" Title="">
<item>dab</item>
</TargetName>
</Result>