广州赶集网找人:FLASH加载XML数据分析:AS3中应用XML数据

来源:百度文库 编辑:中财网 时间:2024/05/05 01:37:13
AS2中应用XML会很繁琐,因为我们不得不使用大量重复的工作,而AS3的出现,使我们使用XML更方便,AS3采用E4X(ECMAScript for XML)规范,使我们操作XML文件更加简便快速,希望能够对爱好FLASH脚本编程的朋友提供一些帮助。
如何应用以下为AS3中使用XML的基本知识。
一、创建XML对象
在AS3中,创建xml对象有两种方法
1、使用构造函数
如:var xmlstr:String="this is the string";
var myxml:XML=new XML(xmlstr);
trace(myxml);
//输出: this is the string
2、使用XML文本创建XML对象
如:var myxml:XML=this is the string;
trace(myxml);
//输出: this is the string
另外,在AS3中,值得提到的是,可以使用"{ }"来使用变量(如果设置属性,不需要再加引号),这样我们就可以定义变量,使XML使用更加灵活了。
如:var 变量:String="this is the string";
var 子节点:String="child";
var 属性:String="attribute";
var myxml:XML=<{子节点} attr={属性}>{变量};
trace(myxml);
//输出: this is the string
二、操作XML数据
1、使用"."访问子元素,使用"@"访问各个元素的属性
多个相同的子节点成为一个XMLList对象,是一个XML对象的集合,使用" []"访问集合中的单个子节点。
例子:var myxml:XML = this is the string1
this is the string2
;
trace(myxml.child[0]); //输出: this is the string1
trace(myxml.child[0].@attr) //输出 :attribute1
2、同样,使用"."修改、创建子元素,使用"@"修改、创建元素的属性
例子:var myxml:XML = this is the string1this is the string2;
myxml.child[1]="第2个节点的值改变了!";
myxml.child[0].@attr1="这是新创建的属性";
trace(myxml.child[0]);//输出: this is the string1
trace(myxml.child[1]);//输出: 第2个节点的值改变了!
trace(myxml.child[0].@attr);//输出 : attribute1
trace(myxml.child[0].@attr1);//输出 : 这是新创建的属性
3、使用delete删除子节点或属性
例子:var myxml:XML = this is the string1this is the string2;
delete myxml.child[0].@attr
trace(myxml.child[0].@attr);//输出 :输出为空,表示不存在该属性
如果你还需要学习更复杂的操作访问xml知识请查阅相关文档。
学习了AS3中的有关操作XML的知识后,我们还需要知道AS3是如何加载外部的xml文件的,因为将xml定义在flash内部固然能够提高运行的速度,但是如果xml比较大,或者想像前面一样根据不同的情况,加载由ASP、php或其它语言动态生成的xml,就无能为力了,所以学习加载外部的XML可以说是非常非常重要,所以学习加载外部文件(包含xml文件)是非常重要的。
下面就向大家讲解AS3加载外部文件的相关知识:
一、AS3加载外部文件(网络通讯)的三个流程
1、构建通讯请求对象;
一个完整的请求对象应该包括:
(1)请求的地址(对应URLRequest 对象的url属性);
(2)请求的方式(对应URLRequest 对象的GET属性):有两种方式提交,GET和POST方式(同as2),使用URLRequestMethod.GET和URLRequestMethod.POST常量赋值。
(3)请求(提交)的数据(对应URLRequest 对象的data属性):数据的格式对应于contentType属性,AS3对形式的参数传递专门提供一个URLVariables类来处理。
如: var vars:URLVariables=new URLVariables("value=aa");
var req:URLRequest=new URLRequest();
req.url="http://www.youweb.com";
req.method=URLRequestMethod.GET;
req.data=vars;
像AS2一样,可以提交数据给ASP、PHP等动态页面,它们将根据提交的数据,动态生成xml文档。
2、使用通讯请求对象,构建URLLoader对象,并发出数据请求:发出数据请求,就是将请求对象(URLRequest)所携带的信息,向指定请求对象指定的地点发出请求,可以使用URLLoader对象来完成。
有两种方法来发出请求:
(1)在建立URLLoader对象的同时发送请求。var ld:URLLoader=new URLLoader(req);
复制代码
(2)先建立URLLoader对象,等到需要时使用URLLoader对象的load方法发出请求。var ld:URLLoader=new URLLoader();
ld.load(req);
复制代码
3、处理数据通讯结果,调用事件的侦听器处理返回的数据。
在第二步发出请求后,如果有数据返回,将存储到URLLoader对象的data属性中(区别URLRequest对象的data属性),可以通过URLLoader的dataformat属性来判断返回数据的数据格式:
(1)文本类型(URLLoaderDataFormat.TEXT)
(2)二进制类型(URLLoaderDataFormat.BINARY)
(3)值对类型(URLLoaderDataFormat.VARIABLES)
在as2中如果加载的数据不是Unicode编码的,需要使用System.useCodepage=true防止乱码。同样,在AS3中,也使用System.useCodePage=true(注意useCodePage与as2中useCodepage的区别)。
提示:由于再AS2中System是顶级类,而在AS3中不是,在使用System类前需要使用import导入flash.system.System。
同时,URLLoader有6种事件,能够更好的监听和控制加载流程:
(1)Event.OPEN 当URLLoader对象发出请求(或使用load)时,就发出该事件
(2)ProgressEvent.PROGRESS 加载过程中,获取下载字节数信息
(3)Event.COMPLETE 当加载完成后,发出该事件
(4)HTTPStatusEvent.HTTP_STATUS 加载完成或失败前,会发出HTTP状态事件
(5)IOErrorEvent.IO_ERROR 加载出错时发出该事件
(6)SecurityErrorEvent.SECURITY_ERROR 当加载违反安全规则的资源时,发出该事件
可以使用这些事件设置预加载。
另外,在AS2中,我们可以使用getURL()函数来加载外部文件,在AS3中,取而代之的是flash.net包中的navigateToURL()方法用于发送数据请求对象:
如:import flash.net.*;
var url:URLRequest=new URLRequest("http://www.youweb.com/books.asp?id=1");
navigateToURL(url,"_blank");
当只想提交数据,不需要返回数据,还可以使用sendToURL()方法。
如:var url:URLRequest=new URLRequest("http://www.youweb.com/books.asp?id=1");
sendToURL(url,"_blank");
有了以上的知识,继续回到我们前面讲到的内容,同样我们使用AS3来获得mybook.xml文件


Thinking in Java
Bruce Eckel
机械工业


朗文英语词典
--
商务印书馆


数据结构
严蔚敏
清华大学


Database Concepts
Oracle Corporation
Oracle Corporation


复制代码
中的机械工业中的图片地址怎么办呢(即“1.jpg”)?利用上面讲到的AS3应用XML的知识,就不难办到了。由于我们要使用的XML文件是外部文件,再操作之前,我们先要加载进flash,加载完成后转换为XML对象后就可以对xml操作了。
步骤:
(1)首先建立请求对象var req:URLRequest=new URLRequest("mybook.xml");
复制代码
(2)建立URLLoader对象发送数据请求var ld:URLLoader=new URLLoader(req);
复制代码
(3)调用侦听函数,一旦加载完成,则执行ok函数ld.addEventListener(Event.COMPLETE,ok);
function ok(event:Event):void {
复制代码
(4)加载完成后,返回的数据存储在event.target(URLLoader对象)的data属性中//trace(event.target.data);
复制代码
(5)建立XML对象,并把返回的数据转换为xml格式var xml:XML=new XML(event.target.data);
复制代码
(6)使用as3的EX4规范操作XML数据   for (var i:int=0; i<=xml.book.length()-1; i++) {
trace(xml.book[i].pub.@src);
//输出: 1.jpg 2.jpg 3.jpg 4.jpg
}
}
复制代码