我已经看到使用'@attributes'
的xml2json代码的许多版本,代码如下,我的问题是为什么不只是使用obj[attribute.nodeName] = attribute.nodeValue
?
// Changes XML to JSON
function xmlToJson(xml) {
// Create the return object
var obj = {};
if (xml.nodeType == 1) { // element
// do attributes
if (xml.attributes.length > 0) {
obj["@attributes"] = {};
for (var j = 0; j < xml.attributes.length; j++) {
var attribute = xml.attributes.item(j);
obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
//why not just use obj[attribute.nodeName] = attribute.nodeValue
}
}
} else if (xml.nodeType == 3) { // text
obj = xml.nodeValue;
}
// do children
if (xml.hasChildNodes()) {
for(var i = 0; i < xml.childNodes.length; i++) {
var item = xml.childNodes.item(i);
var nodeName = item.nodeName;
if (typeof(obj[nodeName]) == "undefined") {
obj[nodeName] = xmlToJson(item);
} else {
if (typeof(obj[nodeName].push) == "undefined") {
var old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
obj[nodeName].push(xmlToJson(item));
}
}
}
return obj;
};
链接为here
答案 0 :(得分:1)
XML格式具有比JSON更广泛的数据结构。提供信息可以作为节点提供:
<foo>33</foo>
...或作为属性:
<bar foo="33">
相反,JSON没有提供除object属性之外的其他方式:
{"foo": 33}
鉴于此限制,自动JSON到XML转换器的编写者需要一种方法来处理这种情况,并且使用任意前缀@
已成为事实上的标准。
答案 1 :(得分:0)
我现在知道了。区分元素属性和子元素属性。当它们彼此相等时,诀窍就有效了。
像:<tag attr= "Val">
<attr subattr="sub Val "></attr>
</tag>