XML解析类
- <data>
- <item thumb="thumb/p1.jpg" img="image/p1.jpg" bigImg="big_pic/p1.jpg" />
- <item thumb="thumb/p2.jpg" img="image/p2.jpg" bigImg="big_pic/p2.jpg" />
- <item thumb="thumb/p3.jpg" img="image/p3.jpg" bigImg="big_pic/p3.jpg" />
- <item thumb="thumb/p4.jpg" img="image/p4.jpg" bigImg="big_pic/p4.jpg" />
- <item thumb="thumb/p5.jpg" img="image/p5.jpg" bigImg="big_pic/p5.jpg" />
- </data>
以上是我们给出的XML结构,3.0中解析XML再也不像2.0那样繁琐了(不过我有和3.0一样解析的方便类)
下面是我们的XML解析类,本系列教程主要针对2.0转3.0的朋友,所以不会逐行解释
package com.net
{
import flash.events.*;
import flash.net.*;
import com.event.MyEvent;//这里是我们上节自定义的事件扩展类,为什么要用到他呢。因为3.0中事件机制类与类之间不能随便传参数,跟2.0不一样了。通常解析所得的数据要传递的并不是在本类中;
public class ReadXml extends EventDispatcher//这里为什么要继承EventDispatcher,能理解吗?不能的话往下看
{
public function ReadXml(serveURL:String):void
{
var _urlLoader=new URLLoader();
var _urlRequest=new URLRequest(serveURL);
_urlLoader.load(_urlRequest);
_urlLoader.addEventListener(Event.COMPLETE,loadComplete);
}
private function loadComplete(evt:Event)
{
var xml:XML=new XML(evt.target.data);
var myEvent:MyEvent = new MyEvent();//实例化MyEvent
var arr:Array = new Array();//通常解析的XML数据是需要二维数组来保存的,这里XML结构比较简单
var len:uint=xml.children().length();
for (var i:uint = 0; i<len; i++) {
var obj:Object = new Object();
obj.id = i;
obj.thumb = xml.item[i].@thumb;
obj.img = xml.item[i].@img;
obj.bigImg = xml.item[i].@bigImg;
arr.push(obj);
}
myEvent.arr = arr;//上节的事件扩展类中的隐式设置变量方法的简用
dispatchEvent(myEvent);//发送事件,如果需要得到myEvent.arr也就是XML解析后的数据,势必要在需要的地方侦听事件;
evt.target.removeEventListener(Event.COMPLETE, loadComplete);
}
}
}
应用:以上XML解析类 如果在新建fla类应用的话。如下写:
import com.event.MyEvent;
import com.net.ReadXml;
var readXml:ReadXml = new ReadXml("data.xml");
readXml.addEventListener(MyEvent.over, Complete)//那一开始我们为什么要继承EventDispatcher能理解了吧,当我们实例化ReadXml 的时候,就可以ReadXml .addEventListener
function Complete(evt:MyEvent){
trace(evt.arr)
evt.target.removeEventListener(MyEvent.over, Complete);
}
Nice,期待下文
回复该留言