【发布时间】:2017-01-28 06:20:27
【问题描述】:
我同时拥有简单和复杂的 JSON 数据,并使用 JavaScript 递归方法将其转换为 XML,如下所示:
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>"
问题是,它重复了第一个节点。为什么会这样?用开发工具试了很多调试,发现完成这个栈后光标直接进入return语句:
appendTo += prepareXmlOutput(appendTo, obj[i].subNodes);
【问题讨论】:
标签: javascript arrays json xml