天天看點

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的知識,内容會更加深入些。