Flash+xml应用篇:自定义事件返回xml信息

本文介绍了一个自定义的Flash XML加载类,该类通过模仿Flex的HTTPServer类实现XML的外部加载,并通过自定义事件返回加载结果。文章详细展示了类的设计与实现过程。

问题:

我希望可以写一个外部加载xml 的类,并能够返回xml的信息

方法:

仿效flex 的 httpserver 类,可以返回一个xml 的信息;

Flex里面

一,自定义事件

package ReadXML { import flash.events.Event; public class SendXMLEvent extends Event { public var Myxml:XML; public static const Send:String = "send"; public function SendXMLEvent(str:String) { super(str,false,false); } } }

xml:

<?xml version="1.0" encoding="UTF-8"?> <SongItem> <song> <name>周杰伦-彩虹</name> <url>http://www.shinehid.com/media_b/caihong.mp3</url> </song> <song> <name>周杰伦-青花瓷</name> <url>http://www.shinehid.com/media_b/caihong.mp3</url> </song> <song> <name>周杰伦-七里香</name> <url>http://www.shinehid.com/media_b/caihong.mp3</url> </song> </SongItem>

二:封装类

package ReadXML { import flash.events.*; import flash.net.*; [Event(name="sendEvent",type="SendXMLEvent")] public class GetXml extends EventDispatcher { private var mylist:XML; private static var obj:GetXml=null; public function GetXml() { //if(obj!=null) // new Error("SOrry"); } public function LoadXML(url:String):void { var _loader:URLLoader=new URLLoader(); _loader.load(new URLRequest(url) ); _loader.addEventListener(Event.COMPLETE,handReSult); _loader.addEventListener(IOErrorEvent.IO_ERROR,ErrorHander); } private function handReSult(event:Event):void { mylist=XML(event.target.data); var s:SendXMLEvent=new SendXMLEvent("sendEvent"); s.Myxml=mylist; dispatchEvent(s);// } public static function getInstance():GetXml { if(obj==null) obj=new GetXml(); return obj; } private function ErrorHander(e:IOErrorEvent):void { trace("cuowu"); throw new Error("cuowu"); } } }

操作:

private function GetList():void { obj.LoadXML("../Config/Mysong.xml"); obj.addEventListener("sendEvent",doing); } internal function doing(event:SendXMLEvent):void { MyList=XML( event.Myxml); trace(MyList); }

暂时这样 :明天再改

在flash 里面的,首先我们先自定义一个事件类,用于加载xml的时候返回一个参数

package { import flash.events.Event; public class LoadEvent extends Event { public static const LOADXML:String="loadxml"; public var result:XML; public function LoadEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false) { super(type,false,false); } override public function clone():Event { return new LoadEvent(result); } } }

自定义个LoadEvent 事件,这个事件带一个参数,result 类型是xml

自定义一个事件类型:LOADXML

2.定义一个加载xml的类,这个类用于管理xml 的加载

package { import flash.net.*; import flash.events.*; public class XMLManager extends EventDispatcher { public function XMLManager() { } public function LoadXML(pach:String):void { var ld:URLLoader=new URLLoader(); ld.load(new URLRequest(pach)); ld.addEventListener(Event.COMPLETE,resultHandle); ld.addEventListener(IOErrorEvent .IO_ERROR,errorhandle); } private function resultHandle(e:Event):void { var myxml:XML=XML(e.target.data ); var sendevent:LoadEvent=new LoadEvent(LoadEvent.LOADXML); sendevent.result=myxml; this.dispatchEvent(sendevent); } private function errorhandle(e:Event):void { throw new Error("加载失败"); } } }

方法体:LoadXML(路径); 加载完后,就调用我们的事件

var sendevent:LoadEvent=new LoadEvent(LoadEvent.LOADXML);
   sendevent.result=myxml;
   this.dispatchEvent(sendevent);

由于我们的public class XMLManager extends  EventDispatcher

XMLManager  继承了事件EventDispatcher 类 他是是 DisplayObject 类的基类 因此我们可以调用他的事件分派

 EventDispatcher 类允许显示列表上的任何对象都是一个事件目标,同样允许使用 IEventDispatcher 接口的方法。

正式调用他

package { import flash.display.Sprite; import flash.events.*; public class main extends Sprite { public function main() { var ld:XMLManager=new XMLManager(); ld.LoadXML("picture.XML"); ld.addEventListener(LoadEvent.LOADXML ,resulthander); } private function resulthander(e:LoadEvent):void { trace(e.result); } } }

这样我们以后就可以使用这个已经封装好的来返回我们的xml信息了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值