Mar1009
Mar1009

Reputation: 811

How to convert objects of array in to XML in Javascript

I have a data nested data structure or JSON, how can I convert that into an XML structure in Javascript.

[
    {"loanId" : "LA00123", "MemberId" : "MI00123"},
    {"loanId" : "LA001234", "MemberId" : "MI001234"}
]

Excepted result:

<result>
    <loanID>LA00123</loanID>
    <MemberId>MI00123</MemberId>
</result>
<result>
    <loanID>LA001234</loanID>
    <MemberId>MI001234</MemberId>
</result>

Upvotes: 1

Views: 2305

Answers (2)

shrys
shrys

Reputation: 5940

If you're converting data into XML as a string, you could perform reduce on the array:

let obj = [{
    "loanId": "LA00123",
    "MemberId": "MI00123"
  },
  {
    "loanId": "LA001234",
    "MemberId": "MI001234"
  }
];

const toXml = (data) => {
  return data.reduce((result, el) => {
   return result + `<result><loadId>"${el.loanId}"</loadID><MemberId>${el.MemberId}</MemberId></result>\n`
  }, '')
}

console.log(toXml(obj));


Creating XML object (overkill):

let obj = [{
    "loanId": "LA00123",
    "MemberId": "MI00123"
  },
  {
    "loanId": "LA001234",
    "MemberId": "MI001234"
  }
];

let doc = document.implementation.createDocument(null, "myXML");

obj.forEach(a => {
  let result = doc.createElement("result");
  Object.entries(a).forEach(b => {
    let node = doc.createElement(b[0]);
    node.append(doc.createTextNode(b[1]));
    result.append(node);
  });
  doc.documentElement.append(result);
});

console.log(new Array(...doc.documentElement.children).reduce((a, b) => a + new XMLSerializer().serializeToString(b), ''));

Upvotes: 1

MH2K9
MH2K9

Reputation: 12039

Simply by an iteration you can preapre the XML element first and the join by empty character.

Here Array.prototype.map() is used to make an iteration over the array and Array.prototype.join() is used to concatenate the prepared XML element to final result.

const data =  [{"loanId" : "LA00123", "MemberId" : "MI00123"},{"loanId" : "LA001234", "MemberId" : "MI001234"}]

const result = data.map(obj => `<result><loanID>${obj.loanId}</loanID><MemberId>${obj.MemberId}</MemberId></result>`).join('')
console.log(result)

Upvotes: 2

Related Questions