Reputation: 796
I tried to implement a simple loop by checking the null for the variable and setting in the result.
My portion of mule flow looks like below.
Database(select) -> Transform Message(DataWeave- convert to xml)
Database has value as like below :
Book1 Book2 Book3 Book4 Book5
abc cde fgh ijk lmn
opq rst NULL NULL NULL
Dataweaver code looks like below :
ns0#LibraryDetails:{
ns0#User: payload."Book1",
ns0#User: payload."Book2",
ns0#User: payload."Book3",
ns0#User: payload."Book4",
ns0#User: payload."Book5"
}
Expected output1 is
<LibraryDetails>
<User>abc</User>
<User>cde</User>
<User>fgh</User>
<User>ijk</User>
<User>lmn</User>
</LibraryDetails>
Expected output2 is
<LibraryDetails>
<User>opq</User>
<User>rst</User>
</LibraryDetails>
How can we escape only null values and creating loop in data weave. I tried map function as well. Could you please show some light on this.
Upvotes: 0
Views: 424
Reputation: 11606
To get the expected output use map
and then use skipNullOn="everywhere"
if you want that logic across all elements. The following gives me your expected output
%dw 1.0
%output application/xml skipNullOn="everywhere"
%namespace ns0 http://something.com
---
ns0#LibraryDetails: { (payload map {
ns0#User: $.Book1,
ns0#User: $.Book2,
ns0#User: $.Book3,
ns0#User: $.Book4,
ns0#User: $.Book5
} ) }
Upvotes: 1
Reputation: 11
You can try this:
ns0#LibraryDetails:{
ns0#User: when null != payload."Book1" then payload."Book1" ,
ns0#User: when null != payload."Book2"then payload."Book2",
ns0#User: when null != payload."Book3"then payload."Book3",
ns0#User: when null != payload."Book4"then payload."Book4",
ns0#User: when null != payload."Book5"then payload."Book5"
}
ELSE: Use the beow statement: %output application/xml skipNullOn="everywhere"
Upvotes: 0