Simbu
Simbu

Reputation: 796

Default namespace declaration in data weaver

I am trying implement the default namespace while creating XML in the data weaver. I went thought below data weaver documentation and earlier posts. Could not get any clue on this. How can we declare default namespace.

https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-tutorial

My input will be from DB - linked list. Output is XML.

%dw 1.0
%namespace ns0 urn:abc:def:Components
%output application/xml
---
{
    ns0#University: {
        college: payload.college[0],
        (payload map ((payload01 , indexOfPayload01) -> {
            dept: {
                deptName: payload01.dept,
                Noofstudents: payload01."No of students" as :number
            }
        }))
    }
}

Current output is

<ns0:University xmlns:ns0="urn:abc:def:Components">
<college>abc</college> <!-- this is simple tag/ It will not repeat -->
<dept> <!-- This is complex tag -->
   <dept Name>IT</dept Name>
   <No of students>5</No of students>
</dept>
<dept>
   <dept Name>IT</dept Name>
   <No of students>5</No of students>
</dept>
<dept>
   <dept Name>IT</dept Name>
   <No of students>5</No of students>
</dept>
</ns0:University>

Expected output is

<University xmlns="urn:abc:def:Components">
<college>abc</college> <!-- this is simple tag/ It will not repeat -->
<dept> <!-- This is complex tag -->
   <dept Name>IT</dept Name>
   <No of students>5</No of students>
</dept>
<dept>
   <dept Name>IT</dept Name>
   <No of students>5</No of students>
</dept>
<dept>
   <dept Name>IT</dept Name>
   <No of students>5</No of students>
</dept>
<University>

Upvotes: 2

Views: 1081

Answers (2)

rangrao
rangrao

Reputation: 11

For the solution of above problem you can add the xmlns="urn:abc:def:Components" as attribute to the 'University' tag. Do not use the namespaces logic here otherwise it will create University tag with ns0# namespace.

Like as University @(xmlns:"urn:abc:def:Components")

Upvotes: 1

Simbu
Simbu

Reputation: 796

I could not find solution to implement default namespace in request xml construction through DataWeave.

Though i can use below sort of Dataweave as temporary solution. Appended the namespace "ns0#" in all the request xml tags.

Kindly let me know, if there is any simplest way to do.

%dw 1.0
%namespace ns0 urn:abc:def:Components
%output application/xml
---
{
    ns0#University: {
        ns0#college: payload.college[0],
        (payload map ((payload01 , indexOfPayload01) -> {
            ns0#dept: {
                ns0#deptName: payload01.dept,
                ns0#Noofstudents: payload01."No of students" as :number
            }
        }))
    }
}

Upvotes: 0

Related Questions