周日CG接到一位网路上的朋友的问题,要求用flash ActionScript实现从服务端读取动态生成的数据并且进行解析,输入到用户界面的小程序今天代码放上来与大家分享,实现过程很简单,供初学者学习,也希望老鸟指正。
要求:BS结构下,客户端使用flash从服务端读取动态生成的XML格式数据,并将获取的数据进行解析和发送到界面显示。
XML格式:
<root>
? <username uid=”ceshi001″>
??? <title>sdfsdf</title>
??? <beginTime>2009-10-10</beginTime>
??? <endTime>2009-10-01</endTime>
??? <currentMoney>56456</currentMoney>
??? <state>良好</state>
??? <isMember>否</isMember>
? </username>
? <username uid=”ceshi002″>
??? <title>dfgdfgdfg</title>
??? <beginTime>2009-10-10</beginTime>
??? <endTime>2009-10-01</endTime>
??? <currentMoney>23</currentMoney>
??? <state>良好</state>
??? <isMember>否</isMember>
? </username>
</root>
要求解析成单个user对象并使用Array保存,其中user对象包含XML中的数据
的属性
主要代码:
package {
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.xml.*;
public class FlashXml extends Sprite
{
//UserInfo业务对象实例
private var bui:BUserInfo = new BUserInfo() ;
//XML缓存
private var XmlData:XML;
//用户列表
private var userList:Array;
//constructor
public function FlashXml() {
//加载XML
loadXml();
}
/**
*方法名:loadXml
*功能:加载外部XML数据
*/
private function loadXml():void{
var loader:URLLoader = new URLLoader();
//设置Loader的事件监听
configureListeners(loader);
//URL请求对象,从配置类中获取URL
var request:URLRequest = new URLRequest(ApplicationConfig.RequestURL);
try {
loader.load(request);
} catch (error:Error) {
trace("加载XML错误.");
}
}
/**
*方法名:configureListeners
*功能:设置对象的事件监听
*/
private function configureListeners(dispatcher:IEventDispatcher):void {
//加载完成
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
//设置读取完成事件绑定
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
//捕获安全错误和IO错误
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
}
/**
*方法名:completeHandler
*功能:XML数据加载完毕之后操作
*/
private function completeHandler(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
this.XmlData = new XML(loader.data);
userList = bui.GetUserInfoList(XmlData);
this.XmlParse()
}
/**
*方法名:securityErrorHandler
*功能:Flash安全配置限制
*/
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("SecurityError: " + event);
}
/**
*方法名:ioErrorHandler
*功能:IO错误
*/
private function ioErrorHandler(event:IOErrorEvent):void {
trace("IOError: " + event);
}
/**
*方法名:XmlParse
*功能:解析XML的简单测试
*/
private function XmlParse():void {
//用户Array的遍历
for each(var user:UserInfo in userList){
trace(user.getUid());
trace(user.getTitle());
trace(user.getBeginTime());
trace(user.getEndTime());
trace(user.getCurrentMoney());
trace(user.getState());
trace(user.getIsMember());
}
}
}
}
代码说明UserInfo为包含user全部信息的实体类,BUserInfo则是
UserInfo实体的业务层基本业务类,其中包含返回所有用户列表的
GetUserInfoList()方法,具体可以参看的完整源代码。
完整源代码下载地址:
http://www.lidaren.com/code/FLashXML/src.zip