摘要:基于ActionScript脚本的Flash可以读取外部数据,本文针对Flash直接读取XML文档、文本文件和Flash连接数据库的实现方法,进行了分析和比较,并得出Flash直接读取文本文件、XML文档比较适合小数据量、非动态更新的数据,Flash连接数据库的方法具有处理大数据量、支持数据动态更新维护的优势。
关键词:Flash,XML文档,ASP,数据库
1 前言
Flash是一款强大的交互式矢量动画设计软件,适用范围广、应用实体多(伍守意,2010),其导出的文件小,网络传输方便。基于Flash强大的ActionScript脚本,Flash可以灵活读取外部数据源(比如文本,XML文档,数据库等),但是Flash并不能直接读取数据库,这点限制了Flash项目的数据更新和维护。借助于ASP(Active Server Page)可以实现Flash对数据库的连接和数据管理和操作。本文对Flash读取XML文档、Flash读取文本和Flash连接数据库方法的实现方法进行了介绍和比较。
2 Flash直接读取XML文档的方法
2.1 Flash简介
Flash是美国Macromedia公司开发的一款矢量图形编辑和交互式动画制作专业软件。它同时支持影像、图片、视频与音效等多媒体形式,结合ActionScript和内置组件,可以制作出效果极佳的动画类作品,在程序UI设计中的应用也越来越广泛。
2.2 XML的概念
XML(Extensible Markup Language)是可扩展标记语言的简称。在不同的应用程序中,信息的格式和构造方法各有不同,这直接影响应用程序之间的信息传达,因此需要制定一种统一的信息格式。从本质上讲,XML就是这种为信息传达提供格式化和构造的方法,使得接收信息的应用程序(如flash等)能够从格式化的文件中轻松翻译和使用信息。
2.3 XML文档的结构
XML的语法简单,采用与HTML类似的标记、属性和值。不同的是XML没有HTML那些预定义的标记(比如<body>、<head>和<html>),而且XML中的标记是自己定义的,并不是从一个已有的标记名称库中取用的。
图1. XML文档的结构
如图1所示的XML文档中,每个完整标记对(比如<Name></Name>)称为一个节点,而每个XML文档只能有一个根节点(如上例中的<Persons></Persons>)。上例中的根节点又含有3个子节点(有3组相同的信息,就重复出现3个相同的XML子节点)。第一个子节点具有一个Name的节点名和张小芳的节点值。每个子节点中的Gender是该节点的属性,可选且个数不限,一般利用属性保存一些不必显示的信息,比如用户的ID等。
2.4 在Flash中使用XML
在Flash中使用XML时一般分为四个步骤:(1)在flash中建立XML对象;(2)从指定的XML文档读取数据并加载到XML对象中;(3)在XML对象的onLoad方法中读取节点的值;(4)在其他动作中使用这些数据。
(1)在Flash中建立XML对象。在flash中使用new方法新建XML对象,比如:var myXML=new XML()。
(2)将外部的XML数据加载到XML对象中。利用load方法读取外部XML文档,并加载到myXMl对象中。加载Address.xml(图2)的语句:myXML.load("Address.xml")。
图2. Address.xml的数据结构
(3)重写XML对象的onLoad方法函数。比如:myXML.onLoad=myonload,当load方法读取完XML的数据后,Flash会自动调用该函数。调用onLoad方法时,函数会自动返回一个参数success,如果加载XML文档成功,则success值为true;如果未收到该XML文档,则success值为false,这可以帮助程序捕获异常。在myonload函数中,通过XML对象的属性读取XML对象中的各节点数据,并将读取的数据存放到数组中,以备其他地方使用。比如:myXML. firstChild.childNodes[0].childNodes[0].childNodes[0].nodeValue,表示返回myXML对象中的第一个节点元素(根节点元素<AddressBook></AddressBook>)的第一个子元素节点(<Person></Person>)的第一个子元素节点(<Name></Name>)的第一个子元素的值。本例中的结果是返回:Mary。
(4)在其他动作中使用读入的数据,在此不详细阐述。
1.5 用xPath读取XML
我们发现,在使用XML对象本身的方法读取XML文档节点值时,读取的路径并不是件方便的事情。编写好的表达式中并不能反映出获取了什么信息,这也为程序员带来了困扰。
xPath是一门用于在XML文档中查找信息的语言,它使用包含元素和属性的路径表达式进行导航。这些路径表达式和我们常规的电脑文件路径表达式非常相似。xPath的内建函数超过100个,这些函数可用于字符串值、数值,日期和时间比较,节点和QName处理,序列处理,逻辑值等。
使用之前需要先导入xPath类,比如import com.xfactorstudio.xml.xpath.*。在XML对象的onLoad方法函数中利用xPath的类方法读取XML文档的数据。比如读取上例中的信息,输入这条语句:XPath.selectNodes(myXML, "/AddressBook/Person[1]/Name/text()"),返回的结果与上例相同:Mary。
3 基于ASP的Flash连接数据库的方法
3.1 ASP简介
ASP(Active Server Page)是Microsoft公司推出的一种基于服务器端的脚本编程语言。Flash与ASP的组合,使得Flash获得强大的数据库支持,有利于Flash的数据维护和更新。
3.2 基本原理
Flash不能直接查询数据库,但是将Flash和ASP连接后可以查询数据库。Flash与数据库的连接可以理解为3层结构,Flash是应用程序层,ASP是数据连接层,数据库是数据存储层,其原理如图3所示。
图3 Flash与数据库连接的基本原理
3.3 Flash连接数据库
Flash连接数据库的方法一般分为几个方面:(1)数据库的设计;(2)Flash与ASP通信脚本的编写;(3)ASP脚本的编写。
(1)本数据库以Microsoft Access为例设计,在实际应用中如果是SQL Server、Excel或者其他的数据库,虽然它们的连接方法不同,但是原理和处理方法基本是一样的,因此选择Access并不会减少该案例的参考价值。建立一个数据库,取名为AddressBook.mdb。在库中创建表Person,其结构如表1。
表1 Person表的表结构
字段名称 | 数据类型 | 字段宽度 |
ID | 自动编号 | 默认值 |
Name | 文本 | 15 |
Mobile | 文本 | 15 |
Address | 文本 | 50 |
文本 | 50 |
(2)Flash向ASP发送数据。Flash与ASP的通信方式很多,本文选择Flash自带的LoadVars类,因为它容易掌握,使用方便。在使用时只要记住此类的两个方法和一个事件:load、loadAndSend方法和onLoad事件。
LoadVars类的使用分四步:①创建一个LoadVars对象:var myloadToSend=new LoadVars();②给该对象添加需要传递的变量:myloadToSend.Name=_root.NameTxt.text // NameTxt是一个输入文本框的实例名;③Flash向ASP发送数据的语句是:myloadToSend.sendAndLoad("http://localhost/FlashDB/AddAddress.asp", myloadToReceive, "post")。④Flash接收ASP返回的数据后,对数据进行显示。利用onLoad事件,可以自动监听返回是否成功,如果成功,则对数据进行处理,否则,报错。例如:
myloadToReceive.onLoad = function(success) {
if (success) {
_root.NameTxt.text=this.Name;
}else {
_root. NameTxt.text = "Can't connect to Server";
}
};
(3)ASP脚本的编写,其任务主要分两部分,一是接收和传回Flash的数据,二是发送请求和接收数据库的处理结果。
ASP接收从Flash端传过来的参数的语句,例如:Name=Request.Form("Name")。在服务器端处理完请求,获取所要的数据后,由ASP向Flash传回数据,比如:Response.Write "Name="&Name。
ASP连接Acess数据库的方法:
Set newconn=Server.CreateObject("ADODB.Connection")
DBPath=Server.MapPath("AddressBook.mdb")
newconn.Open"Driver={Microsoft Access Driver (*.mdb)};DBQ="&DBPath
向数据库发送查询请求并接收返回结果的方法:
Set rs=Server.CreateObject("ADODB.Recordset") '定义结果数据集
sql="select * from Person where Name="Mary" '设置查询条件
rs.open sql,newconn '按查询条件查询数据库,并接收返回结果
4 Flash直接读取文本文件的方法
4.1 Flash读取文本文件
通过使用Flash中LoadVars类的LoadVariables()或Load()方法,可以直接在Flash中装载文本文件(.txt)。使用方法是:(1)新建一个LoadVars对象,比如:var container:LoadVars=new LoadVars();(2)利用Load()方法加载文本文件,比如:container.load("AddressBook.txt");(3)利用onLoad事件判断数据是否加载完毕,然后再作数据处理。判断代码如下:
container.onLoad=function(success:Boolean){
if(success){
_root.NameTxt.text=container.Name;
}else{
_root.NameTxt.text="Error! Can not load data." ;
}
}
4.2 文本文件的格式
当文本字符串被装在到Flash中后,Flash会自动将解析成变量名/值,进而可以使它们像变量一样被使用。如要被Flash正确解析,文本格式必须符合MIME格式。(1)变量与其值之间使用等号连接;(2)多组变量/值对之间用&分隔;(3)值不能含有任何空格,如果要在一个变量中使用空格,必须用"+"取代空格。比如:Name=Mary& Address=普陀区+光复西路1000&Email=Marygeo@163.com。
如果文本文件中包含非ASCII字符,比如上例中的Address出现中文字符,则在文本文件保存时,编码格式选择UTF-8或UTF-16,否则装载到Flash中后值会出现乱码。
5 Flash中多种数据读取方法的比较
表2 Flash读取数据方法比较
数据插入、修改和删除 | 适用的数据量 | 实现繁杂度 | 数据类型、结构 | |
Flash读取XML | 不支持 | 中等 | 一般 | 类型多样,相同结构重复 |
Flash连接数据库 | 支持 | 较大 | 较复杂 | 类型多样,自动以数据结构 |
Flash读取文本 | 不支持 | 较小 | 简单 | 类型单一,变量/值的字符串结构 |
(1)从数据操作的自由程度方面比较,Flash连接后台数据库的方法相对于Flash直接读取文本文件或XML文档适用范围更广。主要体现在以下几个方面:①Flash虽然能直接利用自带的类方法加载文本或XML文档,但是不能方便地插入、修改和删除其中的内容,限制了Flash程序和后台数据之间的动态更新。②数据库相对于简单的文本文件具有更强大的数据管理和维护能力且操作方便,比如SQL SERVER、ACCESS和EXCEL等。③基于ASP的Flash连接数据库方法,不仅能实现本地数据库的连接,也为远程Flash客户端访问提供可能。
(2)从方法的适用性方面比较,多个方法具有各自的适用情况。①对于少量的变量数据,只要用到Flash的Load方法就能完成读取功能。②对于数据量较多,且没有更新需求的数据,选择Flash读取XML文档的方法是较好的选择。一方面,即能满足数据量的要求,又没有数据库那么繁复;另一方面,XML所提供的统一数据标准,可以有效实现与其他程序的数据交换。其应用的例子很多,比如网上流行的XML动态相册、网络地图上的商铺信息(特指文本描述信息)等。③对于大数据量,且有数据更新需求的情况,应选择Flash与数据库连接的方法。在具体选择数据库时,本文推荐Microsoft Access。SQL SERVER相对庞大,属于服务器级别的,而非服务器级别的ACCESS安装方便(一般OFFICE中都会安装),其支持的SQL指令也非常齐全,并且完全能满足中小企业级的数据量服务。
6 结束语
Flash具有强大的脚本支持,使得它能方便的读取外部文本文件和XML文档。借助于ASP等中介连接数据库,进一步扩展了Flash的后台数据存储和管理能力。本文中介绍的三种Flash读取数据的方法,是比较典型的三种,其中Flash连接数据的方法可以为日后进一步研究数据符号化的实现提供参考。
参考文献
[1] 金斌英,夏安螺. Flash 与 XML 通信方法及其实现[J]. 考试周刊. 2008, 1.
[2] 年爱华. 基于 ASP 实现 Flash 对数据库的访问[J]. 中国西部科技. 2010, 9(006): 26-28.
[3] 邢江涛. 基于 Flash 与 ASP 技术的竞赛记分系统的设计[J]. 晋城职业技术学院学报. 2010, 3(005): 58-60.
[4] 赵航涛. 在 Flash 中访问 XML 数据[J]. 中小学电教: 教师版. 2005(005): 59-60.
[5] Maker Jobe,Patterson Danny. Flash 8 ActionScript标准教材[M]. 北京: 电子工业出版社, 2007.
[6] 伍守意. Flash 项目与数据库通信的研究——基于 ASP .NET 技术[J]. 电脑知识与技术. 2010, 6: 26.
相关示例文件见:http://download.csdn.net/source/3283841