2016-09-17 12 views
0

'@attributes'を使用してxml2jsonコードの多くのバージョンを見てきました。コードは次のとおりです。なぜ私の質問はobj[attribute.nodeName] = attribute.nodeValueを使用しないのですか?XMLをJSONに変換するときに '@attributes'を使用する理由

// 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

属性を保持するためにattributesプロパティを使用するのが一般的です。通常のHTML DOM要素は、属性がプロパティではないため、 'element.attributes'で同じことを行います。なぜ@記号が使用されているのか分かりませんが、PHPなどの他の言語で何十年もXMLを解析する際にその方法で使用されています。 – adeneo

答えて

0

です。要素属性と子要素属性を区別すること。彼らがお互いに等しいとき、トリックは機能します。

同様:<tag attr= "Val"> <attr subattr="sub Val "></attr> </tag>

1

XMLフォーマットはJSONよりもデータ構造の広い範囲を持っています。

<foo>33</foo> 

...または属性として:

{"foo": 33} 

<bar foo="33"> 

逆に、JSONオブジェクトのプロパティよりも、他の方法を提供していないノードのいずれかとして情報のギブピースを提供することができます

自動化されたJSONからXMLへのコンバータの作成者は、この状況を処理する方法が必要であり、任意の接頭辞@がデファクトスタンダードになっています。

関連する問題