My input xml is :
<?xml version='1.0' encoding='UTF-8'?>
<HRPeopleMaster>
<Employee>
<EmployeeID>123456</EmployeeID>
<LastName>surname1</LastName>
<FirstName>abc</FirstName>
</Employee>
<Employee>
<EmployeeID>56789</EmployeeID>
<LastName>surname2</LastName>
<FirstName>xyz</FirstName>
</Employee>
</HRPeopleMaster>
I have a variable which contains a JSON array:
`var hroutput = [ {"customString": "10526","userId": "123456"},{"customString": "10551","userId": "45678"}]`
I want to insert the field customstring from this variable into the above xml only if the vars.hroutput.userId == Employee.EmployeeID condition is met.
So the final output should look like this:
`<?xml version='1.0' encoding='UTF-8'?>
<HRPeopleMaster>
<Employee>
<EmployeeID>123456</EmployeeID>
<LastName>surname1</LastName>
<FirstName>abc</FirstName>
<customString>10526</customString>
</Employee>
<Employee>
<EmployeeID>56789</EmployeeID>
<LastName>surname2</LastName>
<FirstName>xyz</FirstName>
<customString/>
</Employee>
</HRPeopleMaster>`
Please guide me on how I can achieve this in a dataweave 2.0 script of Mulesoft
I tried to use the filter condition :
`{
HRPeopleMaster: {
(payload.HRPeopleMaster.*Employee map ( employee , indexOfEmployee ) -> {
Employee: { FirstName: employee.FirstName
} ++ (customString: (hroutput.customString) filter (hroutput.userId contains employee.EmployeeID))
})
}
}`
The output was like this:
`<?xml version='1.0' encoding='UTF-8'?>
<HRPeopleMaster>
<Employee>
<FirstName>Rajan</FirstName>
<customString>10526</customString>
<customString>10551</customString>
</Employee>
<Employee>
<FirstName>Eamon</FirstName>
<customString/>
</Employee>
</HRPeopleMaster>`
One way to do this is via Join from Arrays module, like below:
%dw 2.0
import leftJoin from dw::core::Arrays
var hroutput = [
{
"customString": "10527",
"userId": "1234546"
},
{
"customString": "10526",
"userId": "123456"
},
{
"customString": "10551",
"userId": "45678"
}
]
output application/xml
---
HRPeopleMaster:
Employee: leftJoin(payload..*Employee, hroutput, (empID) -> empID.EmployeeID, (hrUserId) -> hrUserId.userId) map {
($.l),
(
customString: ($.r.customString)
)
}