/ Published in: Other
Expand |
Embed | Plain Text
/* ここから */ //XMLのロード var infoXML = new XML(); var xmlData = new Array();//XMLデータを格納する配列 // 改行などの空白を無視 infoXML.ignoreWhite = true; infoXML.onLoad = function(success) { parseDataXML(success ? this : null);} infoXML.load("/* XMLのファイルパス */"); // ---- XML解析 function parseDataXML(infoXML) { if (!infoXML) { trace("XML読み込みエラー"); return; } //解析実行 procParseDataXML(infoXML, xmlData, "", ""); /* ------ 処理後のスクリプトはここ以下に記載 ------ */ /* ------ 処理後のスクリプトここまで ------ */ } // ---- 回帰処理 function procParseDataXML(xmldata:XML, arraydata:Array, arraystr:String, shortcut:String){ /* ------ 設定 ------ */ //ユニーク属性 var unique_on:Boolean = true; //ユニーク属性をセットする時はtrue,使わない時はfalse var unique:String = "id"; //ユニーク属性設定 //ガイド出力 var guide:Boolean = true; //変数のパスを出力する時はコメントアウト //ダブり防止番号自動付加オン var dub_on:Boolean = true; //ダブり防止機能(_2,_3…)をオフにする時はfalse /* ------ 設定ここまで ------ */ /** usage ・各要素名はピリオドでつなぐ ・トップ要素から順にxmlData['第1要素名.第2要素名.第3要素名']と続く ・同階層に同じ要素名が2つ以上存在するとき、2つ目以降は自動的に要素名の後に_2,_3…と付く ・要素にユニーク属性が含まれる場合はxmlData['第1要素名.第2要素ユニーク名属性値.第3要素名'] ・ユニーク属性値が重複する時は2つ目以降自動的に_2,_3…と付く xmlData['第1要素名.第2要素ユニーク名属性値_2.第3要素名'] ・attributesの値は該当する要素@属性名 ・要素が存在する階層の要素の数(Number)はxmlData['第1要素名.第2要素名.第3要素名->max'] ・同階層の頭から数えて該当する要素の順番(Number)はxmlData['第1要素名.第2要素名.第3要素名->num'] ・ショートカットパスは1から数えた順番をピリオドでつなぐ **/ var arraystr_ext:String; var arraySum:String; var scSum:String; for(var i:Number=0 ; i < xmldata.childNodes.length ; i++){ //要素名 arraystr_ext = xmldata.childNodes[i].nodeName; //ダブりを防止 if(arraydata[arraystr + '.' + arraystr_ext] != undefined && dub_on){ var w = 2; while(arraydata[arraystr + '.' + arraystr_ext + '_' + w] != undefined){ w++; } arraystr_ext += "_" + w; } //パスを決定 arraySum = arraystr + "." + arraystr_ext; //最初の"."を抜く if(arraystr == ""){ arraySum = arraySum.substr(1); } //データ挿入 arraydata[arraySum] = xmldata.childNodes[i].childNodes[0].nodeValue; //Attributesの値を取得 var Attributes:Object = xmldata.childNodes[i].attributes; for(var attribute_str:String in Attributes){ //属性がidの場合ユニークなAttributesの値で呼び出し if(attribute_str == unique && unique_on){ //ダブり表示を消す arraystr_ext = xmldata.childNodes[i].nodeName; arraystr_ext += Attributes[attribute_str]; //属性の値がダブるとき if(arraydata[arraystr + '.' + arraystr_ext] != undefined){ var w = 2; while(arraydata[arraystr + '.' + arraystr_ext + '_' + w] != undefined){ w++; } arraystr_ext += "_" + w; } arraySum = arraystr + "." + arraystr_ext; arraydata[arraySum] = xmldata.childNodes[i].childNodes[0].nodeValue; } //属性の値書き出し arraydata[arraySum + "@" + attribute_str] = Attributes[attribute_str]; //ガイド if(guide){ trace(" Attributes "+ attribute_str +" の値 : " + Attributes[attribute_str] + newline + " xmlData['" + arraySum + "@" + attribute_str + "']" + newline); } } //ショートカットパス設定 scSum = shortcut + "." + (i + 1); if(shortcut == ""){scSum = scSum.substr(1);} arraydata[scSum] = xmldata.childNodes[i].childNodes[0].nodeValue; //同階層の要素の総数書き出し arraydata[arraySum + "->max"] = arraydata[scSum + "->max"] = xmldata.childNodes.length; //同階層の頭から数えた順番書き出し arraydata[arraySum + "->num"] = arraydata[scSum + "->num"] = i + 1; //ガイド if(guide){ trace(i + 1 + "/" + xmldata.childNodes.length + " " + xmldata.childNodes[i].nodeName + " の内容 : " + xmldata.childNodes[i].childNodes[0].nodeValue + newline + "xmlData['" + arraySum + "']" + newline + "or : " + "xmlData['" + scSum + "']" + newline); } // ---- 一階層下に if(xmldata.childNodes[i].childNodes[0].firstChild != null){ procParseDataXML(xmldata.childNodes[i], arraydata, arraySum, scSum); } } }
You need to login to post a comment.
