js実装xmlオブジェクト回転json機能例

5520 ワード

この例では、jsが実装するxmlオブジェクト回転json機能について説明します.皆さんの参考にしてください.具体的には以下の通りです.
無限レベルxml構造オブジェクトのjson転送をサポートし、任意のラベル属性のjson転送(ie 8などのブラウザ対応)をサポートします.
xml文字列はxmlオブジェクトを回転します.

function loadXml(str) {
  if (str == null) {
   return null;
  }
  var doc = str;
  try{
   doc = createXMLDOM();
   doc.async = false;
   doc.loadXML(str);
  }catch(e){
   doc = $.parseXML(str);
  }
  return doc;
}


/**
*xml   json  
*xmlObj:xml  
*nodename:    ('ROOT/ITEM')
*isarray:true,        
**/
function xmltojson(xmlObj,nodename,isarray){
   var obj=$(xmlObj);
   var itemobj={};
   var nodenames="";
   var getAllAttrs=function(node){//    xml    json  
      var _itemobj={};
      var notNull=false;
      var nodechilds=node.childNodes;
      var childlenght=nodechilds.length;
      var _attrs=node.attributes;
      var firstnodeName="#text";
      try{
        firstnodeName=nodechilds[0].nodeName;
      }catch(e){}
      if((childlenght>0&&firstnodeName!="#text")||_attrs.length>0){
         var _childs=nodechilds;
         var _childslength=nodechilds.length;
         var _fileName_="";
         if(undefined!=_attrs){
           var _attrslength=_attrs.length;
           for(var i=0; i<_attrslength i="" var="" attrname="_attrs[i].nodeName;" attrvalue="_attrs[i].nodeValue;" _itemobj="" for="" j="0;" _childslength="" _node="_childs[j];" _fildname="_node.nodeName;" if="" instanceof="" array="" a="_itemobj[_fildName];" _fildvalue="getAllAttrs(_node);" try="" return="" nodenames="nodename.split("/")" obj="obj.find(nodenames[i]);" itemobj="">0){
         itemobj[item.nodeName]=getAllAttrs(item);
       }else{
         itemobj[item.firstChild.nodeName]=getAllAttrs(item.firstChild);
       }
     }
   });
   if(nodenames.length>1){
     itemobj=itemobj[nodenames[nodenames.length-1]];
   }
   if(isarray&&!(itemobj instanceof Array)&&itemobj!=undefined){
     itemobj=[itemobj];
   }
  return itemobj;
};


使用方法:

var xmlstr="" +
        "" +
        "  " +
        "00001" +
        "" +
        "" +
        "  " +
        "00002" +
        "" +
        "" +
        "  " +
        "00002" +
        "" +
        "";
var xmlobj=loadXml(xmlstr);


パラメータの設定:
(1)  xmltojson(xmlobj);//結果は次のように返されます.

{
  "USERS": {
    "USER": [
      {
        "state": "0",
        "USERNAME": {
          "type": "String"
        },
        "length": 1,
        "USERID": {
          "type": "String"
        }
      },
      {
        "state": "1",
        "USERNAME": {
          "type": "String",
          "size": "100"
        },
        "length": 1,
        "USERID": "00002"
      },
      {
        "USERNAME": "  ",
        "length": 1,
        "USERID": "00002"
      }
    ],
    "length": 1
  }
}


(2)xmltojson(xmlobj,'USERS/USER',true);結果は次のとおりです.

[
  {
   "state": "0",
   "USERNAME": {
     "type": "String"
   },
   "length": 1,
   "USERID": {
     "type": "String"
   }
  },
  {
   "state": "1",
   "USERNAME": {
     "type": "String",
     "size": "100"
   },
   "length": 1,
   "USERID": "00002"
  },
  {
   "USERNAME": "  ",
   "length": 1,
   "USERID": "00002"
  }
]


PS:ここではxml操作に関するオンラインツールをいくつか提供します.
オンラインXML/JSON相互変換ツール:http://tools.jb51.net/code/xmljson
オンラインフォーマットXML/オンライン圧縮XML:http://tools.jb51.net/code/xmlformat
XMLオンライン圧縮/フォーマットツール:http://tools.jb51.net/code/xml_format_compress
XMLコードオンラインフォーマット美化ツール:http://tools.jb51.net/code/xmlcodeformat
JavaScriptに関する詳細は、「JavaScript操作XMLファイルテクニック総括」、「JavaScript中json操作テクニック総括」、「JavaScript検索アルゴリズムテクニック総括」、「JavaScriptエラーとデバッグテクニック総括」、「JavaScriptデータ構造とアルゴリズムテクニック総括」、「JavaScript遍歴アルゴリズムとテクニック総括」および「JavaScript数学演算使い方総括」のトピックを参照してください.
JavaScriptプログラムの設計に役立つことを願っています.