I am trying to replace "#N/A" values with 0 in all attributes of xml.
Input xml:
<DTOSteps>
<DTOStep Order="1" Name="Rated Premium" Operation="=" Factor="#N/A" Value="#N/A">
<DTOSteps>
<DTOStep Order="1" Name="Property Damage" Operation="=" Factor="#N/A" Value="#N/A">
<DTOSteps>
<DTOStep Order="1" Name="AOI" Operation="=" Factor="#N/A" Value="#N/A"/>
<DTOStep Order="2" Name="Base" Operation="-" Factor="#N/A" Value="#N/A"/>
<DTOStep Order="3" Name="Deductible" Operation="-" Factor="#N/A" Value="#N/A"/>
</DTOSteps>
</DTOStep>
<DTOStep Order="2" Name="Business Income And Extra Expense" Operation="+" Factor="#N/A" Value="#N/A">
<DTOSteps>
<DTOStep Order="4" Name="AOI" Operation="=" Factor="#N/A" Value="#N/A"/>
<DTOStep Order="5" Name="Base" Operation="-" Factor="#N/A" Value="#N/A"/>
<DTOStep Order="6" Name="Deductible" Operation="-" Factor="#N/A" Value="#N/A"/>
</DTOSteps>
</DTOStep>
</DTOSteps>
</DTOStep>
<DTOStep Order="2" Name="Term Factor" Operation="X" Factor="#N/A" Value="#N/A"/>
</DTOSteps>
Expected output: https://github.com/Manikandan99/Map_request/blob/main/Response_dwl.xml
Any ideas please on how to replace in dataweave 2.0?
Use the script given below.
%dw 2.0
output application/xml
var updateAttribute = (element) ->
element mapObject (value, key) -> {
(key) @(
(
if (key.@?)
(key.@ mapObject ((attr_value, attr_key) -> {
(attr_key): if (attr_value == "#N/A") "0" else attr_value
}))
else {}
)
) :
if (value is Object)
updateAttribute(value)
else value
}
---
updateAttribute(payload)