1

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>
MH2K9
  • 11,951
  • 7
  • 32
  • 49
Mar1009
  • 721
  • 1
  • 11
  • 27

2 Answers2

2

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)
MH2K9
  • 11,951
  • 7
  • 32
  • 49
1

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), ''));
shrys
  • 5,860
  • 2
  • 21
  • 36