当前位置: 首页 >> 程序设计 >> Flash中XML应用的原理
 

Flash中XML应用的原理

作者:      来源:zz     发表时间:2007-02-10     浏览次数:      字号:    

 XML(eXtensible Markup Language)是一种具有数据描述功能(Meta-language)、高度结构性及可验证性的语言。和HTML一样,XML同样使用了标记和属性;和HTML最大的不同在于XML的标记和属性允许用户自行定义,并可以依照所定义的标记与属性的语法来开发应用程序。XML采用了开放架构设计,它允许在Internet上的任何平台或语言之间交换数据。这项技术已经被广泛采用,目前几乎难以找到一个不以某种方式使用XML的应用程序。

  一个简单的XML文件如下所示:

<XML>
<FLASH>
<A1>XML入门知识</A1>
<A2>撰写XML</A2>
</FLASH>
<OTHER>
<A1>为什么是XML</A1>
</OTHER>
</XML>

  在Flash中涉及的XML不会很复杂,能看懂类似上面这样的XML文件,足已对付。

  2、为什么在Flash中用XML

  首先,大多数浏览器限制了URL为256个字符(包括查询字符串数据)。而XML对象没有这样的限制,这就使它成为将数据库内容加入Flash动画的一个理想方法。

  其次,XML对象允许输入和集成任何Web上的XML格式的数据到Flash中,Flash能够将XML数据和精彩的动画及声音无缝结合起来。
另外,Flash几乎拥有在任何平台上处理XML的能力。一般来说,大多数XML转换是在服务器端处理的,因为浏览器对XML的支持不是很完全。
但是,Flash载入一个外部XML文件如果超过15秒就会超时,它不会再进行载入,Flash Player和动画会停止。同样的,在浏览器中使用load或sendAndLoad载入64K或更大的数据会导致性能问题。其特征包括服务器应答"Error 501-Not Implemented"或浏览器的无响应状态。Flash Player也不能从外部Web站点上载入XML文件。Flash动画只能从它自己的域里载入XML数据。例如,一个在adomain.com上的Flash动画就不能从bdomain.com读取或载入XML数据。
  二、Flash中XML应用的原理

  从Flash MX开始,对XML的支持已经初具规模,在Flash MX 2004中得到了加强,现在用Flash MX 2004来做有关XML的应用已经很方便了。在Flash MX 2004中使用XML主要有两种方式,使用XML对象和使用XMLSocket对象。使用XML对象应用的是HTTP的通讯方式,而使用XMLSocket对象应用的是Socket的通讯方式,两者有比较大的区别。

  下面分别介绍使用XML的两种方式。

  1、使用XML对象

  在网络应用中,使用XML对象应用HTTP的通讯方式,基本的通讯模式仍然是请求响应。先在Flash中对数据进行处理,生成XML树,然后通过HTTP的通讯方式将XML文件发送到服务器端。在服务器端,先对接收到的XML树进行解释,再根据流程做相应的操作,比如读写数据库或其他的资源,然后生成XML树,通过HTTP的通讯方式将XML文件发送到Flash端。最后在Flash端接收XML文件,对XML树进行解释,对相应的数据进行操作,如此循环。其通讯原理请参考图1。

  下面分别介绍Flash端和服务器端的东西。

  A、Flash端:主要用到XML对象中的send()、load()、sendAndLoad()、onLoad()、onData()及其他操纵XML树的方法与事件。
  比如,生成XML树的代码如下:

loginXML = new XML(); //生成一个XML对象
loginElement = loginXML.createElement("LOGIN"); //生成一个元素
loginElement.attributes.username = username; //设置元素的属性
loginElement.attributes.password = password;
loginXML.appendChild(loginElement); //将所生成的元素加到XML对象
解释XML树的代码如下:
loginReplyXML = new XML(); //生成一个响应的XML对象
loginReplyXML.onLoad = onLoginReply(); //设置响应XML对象下载事件的函数
function onLoginReply () { //对返回的XML文件进行操作
var e = this.firstChild; //解释返回的XML文件
if (e.nodeName == "LOGINREPLY" && e.attributes.status == "OK") {
//根据返回的XML文件中的数据做相应的操作
gotoAndStop ("success");
} else {
gotoAndStop ("loginFailed");
}}

有关XML数据的通讯代码如下:

loginXML.sendAndLoad("http://www.pcedu.com.cn/test.asp", loginReplyXML);
//根据URL去取响应的XML文件到响应的XML对象中
B、在服务器端:常用的工具有Asp、Jsp、PHP、Perl等等脚本语言,它们所起的作用是操纵XML树和数据的通讯。
下面以常用的Asp为例,解释XML树的代码为:
//创建一个新的DomDocument对象,存客户端传送过来的XML请求
var xmlLogin = new ActiveXObject("Msxml2.DomDocument");
//从发送来的表单中取得数据
xmlLogin.loadXML(Request.Form());
//创建XML元素
var reElement = xmlLogin.documentElement;
//提取用户名和密码信息
password = reElement.attributes[0].nodeValue;
username = reElement.attributes[1].nodeValue;
生成XML树的代码为并发送的代码为:
//创建一个新的DomDocument对象,向客户端发送
var xmlRepley = new ActiveXObject("Msxml2.DomDocument");
//创建一个简单的XML文件
xmlRepley.loadXML("<LOGINREPLY login='1' msg='"+Msg+"' />");
//也是通过Write()的方法将XML文件返回到Flash端
Response.Write(xmlRepley.xml);

C、还有一种情况是操作本地的XML文件,无非也就是生成、解释XML文件,得到所要的数据,只不过不需要在服务器端做其他的操作了。比如,读一个本地的XML文件的代码为:

playlist_xml = new XML(); //创建一个XML对象
playlist_xml.ignoreWhite = true; //省略空白
playlist_xml.onLoad = function(success) { //当加载XML文件成功的时候触发此函数
    trace("success");
}
playlist_xml.load("playlist.xml"); //加载本地的XML文件

  值得说明的是,上面所涉及的代码都是举例而已,实际应用中的代码可能会复杂很多。但其中的原理都是相通的,先生成XML文件,发送到服务器端,最后将服务器端返回的XML文件解释。只要思路清晰,做起来就比较有效率,也不容易出错。

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •