我有簡單和複雜的JSON數據,並將其與類似下面的JavaScript遞歸方法轉換成XML:的Javascript遞歸字符串附加
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);
這將產生XML完全正常,但有一個問題。這是它給我的XML:
"<outer><outer><inner>inner vlaue</inner></outer>"
問題是,它有第一個節點重複。你能告訴我爲什麼它的行爲如此。我嘗試了很多與開發工具來調試它,我發現光標直接進入完成這個棧後返回聲明:
appendTo += prepareXmlOutput(appendTo, obj[i].subNodes);
任何幫助表示讚賞。
大。它工作正常,但您能否詳細闡述它?它是如何工作的。和我的實現有什麼問題? –
我想你可以只將'obj'作爲輸入參數,並在函數內聲明'appendTo'。 –
@ManishJangir我加了一個例子。不是100%準確,但你會明白。 –