在这一篇里,我将为大家详细讲解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的知识,内容会更加深入些。