Unityな日々(Unity Geek)

Unityで可視化アプリを開発するための試行錯誤の覚書

XMLParserを使う その2

XMLParserについての続き。(「その1」はこちら)。

XMLNodeクラスには3つのメソッドが定義されている。

class XMLNode extends Boo.Lang.Hash{
	function GetNodeList(path:String){
		return GetObject(path) as XMLNodeList;
	}
	
	function GetNode(path:String){
		return GetObject(path) as XMLNode;
	}
	
	function GetValue(path:String){
		return GetObject(path) as String;
	}
	

それぞれ、XMLNodeList(=Array), XMLNode, String型を返す。

すべてのメソッドはクラス内で GetObject()関数を呼んでいる。

private function GetObject(path:String){
		var bits:String[]=path.Split(">"[0]);
		var currentNode:XMLNode=this;
		var currentNodeList:XMLNodeList;
		var listMode:boolean=false;
		var ob:Object;
		for(var i:int=0;i<bits.length;i++){
			 if(listMode){
				ob=currentNode=currentNodeList[parseInt(bits[i])];
				listMode=false;
			 }else{
				ob=currentNode[bits[i]];
				if(ob instanceof Array){
					currentNodeList=ob as Array;
					listMode=true;
				}else{
					// reached a leaf node/attribute
					if(i!=(bits.length-1)){
						// unexpected leaf node
						var actualPath:String="";
						for(var j:int;j<=i;j++){
							actualPath=actualPath+">"+bits[j];
						}
						Debug.Log("xml path search truncated. Wanted: "+path+" got: "+actualPath);
					}
					return ob;
				}
			 }
		}
		if(listMode) return currentNodeList;
		else return currentNode;


さて、この使い方は次のようだ。(参考:How can I find specific parts of an XML and feed them into dialogue? - Unity Answers