您的位置:首页 > 其它

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

2009-02-19 23:42 375 查看
问题:

我希望可以写一个外部加载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信息了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: