加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML2JSON【练习】

发布时间:2020-12-16 20:01:14 所属栏目:百科 来源:网络整理
导读:网上很多XML2JSON的算法中都习惯用一个“@attributes”把属性统一起来,一开始弄不明白为什么要这样,好像显得很多余,今天自己实现感受了下,明白是因为需要把自身属性的nodeName与子元素的属性区分开来,比如下面测试用例中的Title 在SO我也提问了下,有个

网上很多XML2JSON的算法中都习惯用一个“@attributes”把属性统一起来,一开始弄不明白为什么要这样,好像显得很多余,今天自己实现感受了下,明白是因为需要把自身属性的nodeName与子元素的属性区分开来,比如下面测试用例中的Title
在SO我也提问了下,有个大神详细解答了,比我的答案更贴切:

var  xml2json = function (xml) {
if(xml.nodeType === 9){
    xml = xml.children[0]
}
var  obj = {}

if(xml.nodeType === 1){
if(xml.attributes.length > 0){
var attrs = xml.attributes,attrLen = attrs.length
for(var i = 0 ; i < attrLen ; i++){

        var  node = attrs[i]
        obj[node.nodeName]  =  node.nodeValue
    }
}

}

if(xml.children){
var children = xml.children
var childLen = children.length
for(var j = 0 ; j < childLen ; j++){
var curChild = children[j]
if(!obj[curChild.nodeName]){
//console.log(JSON.stringify(xml2json(curChild)))
console.log(curChild)
obj[curChild.nodeName] = xml2json(curChild)
}else {

        if(!Array.isArray(obj[curChild.nodeName])){
            var old =  obj[curChild.nodeName]
            var  handler = obj[curChild.nodeName] = []
            handler.push(old)
        }
        obj[curChild.nodeName].push(xml2json(curChild))
    }
}

}
return obj
}

var xmlStr = '<ALEXA VER="0.9" URL="davidwalsh.name/" HOME="0" AID="=">'
+'<SD TITLE="A" FLAGS="" HOST="davidwalsh.name">'
+'<TITLE TEXT="David Walsh Blog :: PHP,MySQL,CSS,Javascript,MooTools,and Everything Else"/>'
+'<LINKSIN NUM="1102"/>'
+'<SPEED TEXT="1421" PCT="51"/>'
+''
+''
+'<POPULARITY URL="davidwalsh.name/" TEXT="7131"/>'
+'<REACH RANK="5952"/>'
+'<RANK DELTA="-1648"/>'
+'
'
+''
var domparser = new DOMParser()

var xmlObj =domparser.parseFromString(xmlStr,'application/xml')

var jsonObj = xml2json(xmlObj)
console.log(jsonObj)
console.log(JSON.stringify(jsonObj))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读