今回はXMLクラスの拡張を試みてみた。XMLクラスにXMLをObjectに変換するメソッドを追加した。内容は以下のとおり。
class XML2 extends XML
{
function XML2()
{
super();
}
function xmlToObject(xObj:XML):Object
{
if (xObj == null)
{
xObj = this;
}
var xmlObj:Object = new Object();
xmlObj.length = xObj.childNodes.length;
for (var i in xObj.childNodes)
{
var nName:String = xObj.childNodes[i].nodeName;
var nValue:String = xObj.childNodes[i].nodeValue;
var nType:String = xObj.childNodes[i].nodeType;
if (nType==3)
{
xmlObj = nValue;
}
else if (nType==1)
{
//再帰処理
xmlObj[nName] = xmlToObject(xObj.childNodes[i]);
}
}
return xmlObj;
}
}
今回つまづいたのは再帰処理を止める条件の設定。結果的にはchildNodeのnodeTypeがELEMENT_NODEだった場合だけ再帰処理をさせるって方法で解決した。
要するにXMLの一層目を走査した時、最後に調べたのがタグだったら次の層を再帰処理をして、値(テキスト情報)だったら再帰処理をせずオブジェクトに格納して終了って事をしてる。この条件に気付くまでえらい時間かかった…。
メモ:
XMLNode.nodeTypeが1だったらELEMENT_NODE(タグ要素)。
3だったらTEXT_NODE(値)。
これでXMLの取得がだいぶ簡単になった。あとはImagePreloaderみたいに同時読み込みの機能をつける予定。