Estoy buscando crear un esquema XML a partir de una matriz en el objeto. La longitud de la matriz varía y, en base a eso, me gustaría crear una lógica que genere la respuesta. A continuación se muestra el formato y el ejemplo.
Object - Exact "Data": [{ "JK": true, "Number": "02154029", "Name": "Allen", "Type": "Delta", "Code": "ASM", "Amount": 10 }, { "JK": true, "Number": "92154429", "Name": "Peter", "Type": "Delta", "Code": "FLSM", "Amount": 50 }, . . . . "n items" ]Arriba está el objeto que varía su longitud, usando el objeto anterior me gustaría crear el siguiente esquema XML.
XML - Expected <request ...........> <delta.....> <lineItem id = 1....> </lineItem> <lineItem id = 2....> </lineItem> . . . <lineItem id = n....>(based on length of above array) </lineItem> <params amount = "10" code = "ASM" batch = "1"> <params amount = "50" code = "FLSM" batch = "2"> . . . . <params amount = n code = n batch = n>(based on length of above array) </delta> <keys number = "02154029" name = "Allen"> <keys number= "92154429" name = "Peter"> . . . <keys number= n name = n >(based on length of above array) </request>Le pido que me ayude en esto, creando una lógica usando Javascript
Por favor, hágamelo saber para cualquier aclaración.
Es un poco complicado, dado el resultado esperado, pero factible, usando una plantilla, un analizador json, DOMParser y querySelector:
tmpl = `<doc> <request> <delta> </delta> </request> </doc>` const data = `[{ "JK": true, "Number": "02154029", "Name": "Allen", "Type": "Delta", "Code": "ASM", "Amount": 10 }, { "JK": true, "Number": "92154429", "Name": "Peter", "Type": "Delta", "Code": "FLSM", "Amount": 50 } ]` const jdata = JSON.parse(data); const xmldoc = new DOMParser().parseFromString( tmpl, 'text/xml' ); dest = xmldoc.querySelector('delta') counter = 1; for (let jd of jdata){ dest.insertAdjacentHTML( 'beforeend', `<lineItem id = "${counter}"> </lineItem> ` ); counter++; } for (let jd of jdata){ dest.insertAdjacentHTML( 'beforeend', `<params amount = "${jd.Amount}" code = "${jd.Code}"> </params> ` ); } for (let jd of jdata){ dest.insertAdjacentHTML( 'afterend', ` <keys number = "${jd.Number}" name = "${jd.Name}"> </keys> ` ); } alert(xmldoc.documentElement.innerHTML)