ずーっとできなくてもやもやしてたけど解決したのでメモ!
・解析するXML
<photos>
<photo>
<tags>landscape,cat</tags>
<src>photo/ph.1.jpg</src>
<thumbnail>photo/ph.s1.jpg</thumbnail>
</photo>
<photo>
<tags>landscape</tags>
<src>photo/ph.2.jpg</src>
<thumbnail>photo/ph.s2.jpg</thumbnail>
</photo>
<photo>
<tags>landscape</tags>
<src>photo/ph.3.jpg</src>
<thumbnail>photo/ph.s3.jpg</thumbnail>
</photo>
<photo>
<tags>cat</tags>
<src>photo/ph.4.jpg</src>
<thumbnail>photo/ph.s4.jpg</thumbnail>
</photo>
</photos>
・AS
var myLoader:URLLoader = new URLLoader();
var tagObj:Object = new Object();//ここにタグの情報が入ります。
var urlObj:Object = new Object();//ここにurlの情報が入ります。
//myLoaderの読み込み完了のイベントにリスナー登録する
myLoader.addEventListener(Event.COMPLETE, completeXml);
//XML読み込み
myLoader.load(new URLRequest("photolist.xml"));
//XMLの読み込み完了後実行
function completeXml(e:Event):void {
myLoader.removeEventListener(Event.COMPLETE, completeXml);
//XMLをパースする
var _xml:XML = new XML(e.target.data);
trace(_xml);
//一時格納用配列
var tmpArray:Array;
//photoタグの数だけループさせます。
for (var i:int = 0; i < _xml.photo.length(); i++) {
//tagsタグの中身を","でsplitして、tmpArray配列として格納します。
tmpArray = _xml.photo[i].tags.split(",");
//tmpArrayに入ったタグの数だけループさせます。
for each(var str:String in tmpArray) {
//tagObjタグの名前のプロパティをArray型で生成し、データをpushしていきます。
if (!tagObj[str]) {
tagObj[str] = new Array();
urlObj[str] = new Array();
tagObj[str].push(_xml.photo[i].tags);
urlObj[str].push(_xml.photo[i].src);
} else {
tagObj[str].push(_xml.photo[i].tags);
urlObj[str].push(_xml.photo[i].src);
}
}
}
dbg("landscape");
// 出力
//[landscape]タグのデータは3個あります。
//photo/ph.1.jpg,photo/ph.2.jpg,photo/ph.3.jpg
//}
function dbg(str:String):void{
trace("["+str+"]タグのデータは"+tagObj[str].length+"個あります。");
trace(tagObj[str]);
trace(urlObj[str]);
}
2009年7月 8日 23:58