天天看点

XML和XMLSocket(一) -- XML的基础知识

      在这一篇里,我将为大家详细讲解Flash和服务器保持长连接的一种重要用法,也就是下面要说的XMLSocket类。这个方法广泛应用于实时的应用程序,例如在线聊天室或现在最火热的Flash网页游戏。使用XMLSocket,可以实现服务器端对客户端的数据推送!

      在讲解XMLSocket之前,我先为大家讲解下,在AS3.0中,处理XML的方法。在AS3.0中,处理XML的方式和AS2.0完全不同了。不仅仅是代码的书写更容易,程序的效率也大大提高。

      XML 是一种表示结构化信息的标准方法,可以用任何文本文件来书写,但我推荐大家使用FlashDevelop或者EditPlus工具,可以减少出错的几率。在AS3.0中,已经可以直接书写XML变量,但我还是比较喜欢用Load的方式加载外部XML文件。

      <b>一、XML的基本结构</b>

      示例:

      &lt;card&gt;

      &lt;root id = '1' type = 'a'&gt;

      &lt;Cardcolor&gt;黑桃&lt;/Cardcolor&gt;

      &lt;Cardname&gt;决斗&lt;/Cardname&gt;

      &lt;/root&gt;

      &lt;root id = '2' type = 'b'&gt;

      &lt;Cardcolor&gt;梅花&lt;/Cardcolor&gt;

      &lt;Cardname&gt;雌雄双股剑&lt;/Cardname&gt;

      &lt;/card&gt;

      以上是一个标准的XML文档。XML文档一般由以下四部分组成:

      <b>1. </b><b>元素</b>

      元素是包含在开始标签和结束标签之间的内容。元素当中可以包含其他元素。

      如

      元素1:

      元素2:

      <b>2. </b><b>属性</b>

      属性是和元素相关联的,并且写入到元素的开始标签内的内容。

      如&lt;root id = '1' type = 'a'&gt;,可以理解为:&lt;root&gt;元素拥有2个属性,分别是id属性和type属性。

      <b>3. </b><b>注释</b>

      包含在 &lt;!-- 和 --&gt;标签之间的内容,用以说明XML文档,示例中略。

      如:&lt;!-- 这是一条注释。 --&gt;

      <b>4. </b><b>处理指令</b>

      处理指令用来告诉解析XML的处理器,一些相关的应用信息。

      比如:&lt;?xml version="1.0" encoding="UTF-8"?&gt;

      我除了在crossdomain.xml用到外,平时也没怎么用到,其他功能也不是太清楚,就不多做说明了。

      <b>二、XML的书写方式</b>

      <b>1. </b><b>外部文档</b>

      在外部文档中,只要直接把示例的代码复制一份,然后粘贴到一个文本文件中,然后保存为一个后缀名为xml的文件即可。如card.xml

      <b>2. AS3.0</b><b>中</b>

      在AS3.0中,可以直接保存至XML变量中,方法有以下几种:

     (1) 直接把XML文本赋予XML对象,如:

      var myXML:XML =

      如果要把XML写入到AS,那这种方式是最常用的方式。

      (2) 变量赋值的方式,如:

      var str:String = "&lt;card&gt;&lt;root&gt;&lt;Cardcolor&gt;黑桃&lt;/Cardcolor&gt;&lt;Cardname&gt;决斗&lt;/Cardname&gt;&lt;/root&gt;&lt;/card&gt;";

      var myXML:XML = new XML(str);

      这种方式由于不能很好的显示XML的结构,所以我不推荐使用。但是如果是程序生成XML,那这种方式还是有用武之地的。

      另外着重要说明的是,在XML中是可以用变量的,但需要用{}将变量名括起来。如示例可以用下面的方式完成:

      var card1:String = "Cardcolor";

      var card2:String = "Cardname";

      var con1:String = "黑桃";

      var con2:String = "梅花";

      &lt;{card1}&gt;{con1}&lt;/{card1}&gt;

      &lt;{card2}&gt;决斗&lt;/{card2}&gt;

      &lt;{card1}&gt;{con2}&lt;/{card1}&gt;

      &lt;{card2}&gt;雌雄双股剑&lt;/{card2}&gt;

      采用变量的方式,对于用程序来实现XML是有极大方便的。<b>但这里需要注意的是:不要把标签的&lt;&gt;号也用变量来完成。</b>如var card1:String = "&lt;Cardcolor&gt;";这样是会报错的。

      <b>三、XML的载入</b>

      如果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());

      }

      这段代码我这里就不做说明了,如果实在看不懂,就直接引用吧。

      <b>四、XML的解析</b>

      在AS3.0中,用点符号解析元素,用@符号解析属性,如:

      例1:我们要解析第二个&lt;Cardname&gt;标签,可以用下面的语句:

      trace(myXML.root[1].Cardname);

      例2:我们要解析第二个&lt;root&gt;标签的属性,可以用下面的语句:

      trace(myXML.root[1].@type);

      在AS3.0中,解析的方式非常灵活,可以很方便的实现特定目标的解析,如要实现例1,也可以用以下两种方式:

      第一种,用属性解析

      trace(myXML.root.(@id == 2).Cardname);

      第二种,用其他元素解析

      trace(myXML.root.(Cardcolor == "梅花").Cardname);

      例2也是相同,我这里就不写出来了,大家可以自己尝试一下。多多操作,肯定都会的。

      当然,其他还有非常多的方式可以实现同样的目的,在下一篇里我还会讲到。这里就先不多做叙述了。

      今天的这篇,是最基础的,也是最常用的,希望大家务必详细了解!

      下一篇,还是讲解XML的知识,内容会更加深入些。