在这一篇里,我将为大家详细讲解Flash和服务器保持长连接的一种重要用法,也就是下面要说的XMLSocket类。这个方法广泛应用于实时的应用程序,例如在线聊天室或现在最火热的Flash网页游戏。使用XMLSocket,可以实现服务器端对客户端的数据推送!
在讲解XMLSocket之前,我先为大家讲解下,在AS3.0中,处理XML的方法。在AS3.0中,处理XML的方式和AS2.0完全不同了。不仅仅是代码的书写更容易,程序的效率也大大提高。
XML 是一种表示结构化信息的标准方法,可以用任何文本文件来书写,但我推荐大家使用FlashDevelop或者EditPlus工具,可以减少出错的几率。在AS3.0中,已经可以直接书写XML变量,但我还是比较喜欢用Load的方式加载外部XML文件。
一、XML的基本结构
示例:
<card>
<root id = '1' type = 'a'>
<Cardcolor>黑桃</Cardcolor>
<Cardname>决斗</Cardname>
</root>
<root id = '2' type = 'b'>
<Cardcolor>梅花</Cardcolor>
<Cardname>雌雄双股剑</Cardname>
</root>
</card>
以上是一个标准的XML文档。XML文档一般由以下四部分组成:
1. 元素
元素是包含在开始标签和结束标签之间的内容。元素当中可以包含其他元素。
如
元素1:
<Cardcolor>黑桃</Cardcolor>
元素2:
<root id = '1' type = 'a'>
<Cardcolor>黑桃</Cardcolor>
<Cardname>决斗</Cardname>
</root>
2. 属性
属性是和元素相关联的,并且写入到元素的开始标签内的内容。
如<root id = '1' type = 'a'>,可以理解为:<root>元素拥有2个属性,分别是id属性和type属性。
3. 注释
包含在 <!-- 和 -->标签之间的内容,用以说明XML文档,示例中略。
如:<!-- 这是一条注释。 -->
4. 处理指令
处理指令用来告诉解析XML的处理器,一些相关的应用信息。
比如:<?xml version="1.0" encoding="UTF-8"?>
我除了在crossdomain.xml用到外,平时也没怎么用到,其他功能也不是太清楚,就不多做说明了。
二、XML的书写方式
1. 外部文档
在外部文档中,只要直接把示例的代码复制一份,然后粘贴到一个文本文件中,然后保存为一个后缀名为xml的文件即可。如card.xml
2. AS3.0中
在AS3.0中,可以直接保存至XML变量中,方法有以下几种:
(1) 直接把XML文本赋予XML对象,如:
var myXML:XML =
<card>
<root id = '1' type = 'a'>
<Cardcolor>黑桃</Cardcolor>
<Cardname>决斗</Cardname>
</root>
<root id = '2' type = 'b'>
<Cardcolor>梅花</Cardcolor>
<Cardname>雌雄双股剑</Cardname>
</root>
</card>
如果要把XML写入到AS,那这种方式是最常用的方式。
(2) 变量赋值的方式,如:
var str:String = "<card><root><Cardcolor>黑桃</Cardcolor><Cardname>决斗</Cardname></root></card>";
var myXML:XML = new XML(str);
这种方式由于不能很好的显示XML的结构,所以我不推荐使用。但是如果是程序生成XML,那这种方式还是有用武之地的。
另外着重要说明的是,在XML中是可以用变量的,但需要用{}将变量名括起来。如示例可以用下面的方式完成:
var card1:String = "Cardcolor";
var card2:String = "Cardname";
var con1:String = "黑桃";
var con2:String = "梅花";
var myXML:XML =
<card>
<root id = '1' type = 'a'>
<{card1}>{con1}</{card1}>
<{card2}>决斗</{card2}>
</root>
<root id = '2' type = 'b'>
<{card1}>{con2}</{card1}>
<{card2}>雌雄双股剑</{card2}>
</root>
</card>
采用变量的方式,对于用程序来实现XML是有极大方便的。但这里需要注意的是:不要把标签的<>号也用变量来完成。如var card1:String = "<Cardcolor>";这样是会报错的。
三、XML的载入
如果XML是用外部文件存放的形式,那需要载入该XML文档。
载入XML需要用到URLLoader类,方式如下:
var myXML:XML = new XML();
var xmlurl:String = "card.xml";
var myXMLURL:URLRequest = new URLRequest(xmlurl);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener(Event.COMPLETE, xmlLoaded);
function xmlLoaded(event:Event):void {
myXML = XML(myLoader.data);
trace(myXML.toXMLString());
}
这段代码我这里就不做说明了,如果实在看不懂,就直接引用吧。
四、XML的解析
在AS3.0中,用点符号解析元素,用@符号解析属性,如:
例1:我们要解析第二个<Cardname>标签,可以用下面的语句:
trace(myXML.root[1].Cardname);
例2:我们要解析第二个<root>标签的属性,可以用下面的语句:
trace(myXML.root[1].@type);
在AS3.0中,解析的方式非常灵活,可以很方便的实现特定目标的解析,如要实现例1,也可以用以下两种方式:
第一种,用属性解析
trace(myXML.root.(@id == 2).Cardname);
第二种,用其他元素解析
trace(myXML.root.(Cardcolor == "梅花").Cardname);
例2也是相同,我这里就不写出来了,大家可以自己尝试一下。多多操作,肯定都会的。
当然,其他还有非常多的方式可以实现同样的目的,在下一篇里我还会讲到。这里就先不多做叙述了。
今天的这篇,是最基础的,也是最常用的,希望大家务必详细了解!
下一篇,还是讲解XML的知识,内容会更加深入些。