Ich habe sowohl einfache als auch komplexe JSON-Daten und es zu XML mit JavaScript-rekursive Methode wie unten Umwandlung:Javascript rekursive String Append
var json = [
{
"id": "42cfb980-4221-e97f-f85a-f5fcf4d37f02",
"name": "outer",
"value": "",
"attributes": {},
"subNodes": [
{
"id": "d0794639-5568-3728-11a4-676eb100b07a",
"name": "inner",
"value": "inner vlaue",
"attributes": {},
"subNodes": []
}
]
}
];
function prepareXmlOutput(appendTo, obj) {
var i, k, attributeString = '';
for (i in obj) {
if (obj[i].attributes.length > 0) {
for (k in obj[i].attributes) {
attributeString += ((obj[i].attributes[k].name != '') ? obj[i].attributes[k].name+'="'+obj[i].attributes[k].value+'"' : '') + ' ';
}
}
if (obj[i].subNodes.length < 1) {
if (obj[i].value == '') {
appendTo += '</' + obj[i].name + attributeString.replace(/~+$/,'') + '>';
} else {
appendTo += '<' + obj[i].name + attributeString.replace(/~+$/,'') + '>' +obj[i].value+ '</' + obj[i].name + '>';
}
} else {
appendTo += '<' + obj[i].name + attributeString.replace(/~+$/,'') + '>';
appendTo += prepareXmlOutput(appendTo, obj[i].subNodes);
appendTo += '</' + obj[i].name + '>';
}
}
return appendTo;
}
prepareXmlOutput('', json);
Diese xml erzeugt völlig in Ordnung, aber ein Problem haben. Hier ist die XML, die es mir gab:
"<outer><outer><inner>inner vlaue</inner></outer>"
Das Problem ist, es hat den ersten Knoten wiederholt. Könnten Sie mir bitte sagen, warum es sich so verhält? Ich habe versucht, eine Menge, es zu debuggen mit dev Werkzeug und ich fand, dass der Cursor direkt Anweisung zurück nach Abschluss dieser Stapel geht:
appendTo += prepareXmlOutput(appendTo, obj[i].subNodes);
Jede Hilfe sehr geschätzt wird.
Großen. Es funktioniert gut, aber können Sie es bitte mehr ausarbeiten? wie es funktioniert hat. und was ist das Problem mit meiner Implementierung? –
Ich denke, Sie können nur 'obj' als Eingabeparameter nehmen und' appendTo' in der Funktion deklarieren. –
@ManishJangir Ich habe ein Beispiel hinzugefügt. Nicht 100% genau, aber Sie werden die Idee bekommen. –