在這一篇裡,我将為大家詳細講解Flash和伺服器保持長連接配接的一種重要用法,也就是下面要說的XMLSocket類。這個方法廣泛應用于實時的應用程式,例如線上聊天室或現在最火熱的Flash網頁遊戲。使用XMLSocket,可以實作伺服器端對用戶端的資料推送!
在講解XMLSocket之前,我先為大家講解下,在AS3.0中,處理XML的方法。在AS3.0中,處理XML的方式和AS2.0完全不同了。不僅僅是代碼的書寫更容易,程式的效率也大大提高。
XML 是一種表示結構化資訊的标準方法,可以用任何文本檔案來書寫,但我推薦大家使用FlashDevelop或者EditPlus工具,可以減少出錯的幾率。在AS3.0中,已經可以直接書寫XML變量,但我還是比較喜歡用Load的方式加載外部XML檔案。
<b>一、XML的基本結構</b>
示例:
<card>
<root id = '1' type = 'a'>
<Cardcolor>黑桃</Cardcolor>
<Cardname>決鬥</Cardname>
</root>
<root id = '2' type = 'b'>
<Cardcolor>梅花</Cardcolor>
<Cardname>雌雄雙股劍</Cardname>
</card>
以上是一個标準的XML文檔。XML文檔一般由以下四部分組成:
<b>1. </b><b>元素</b>
元素是包含在開始标簽和結束标簽之間的内容。元素當中可以包含其他元素。
如
元素1:
元素2:
<b>2. </b><b>屬性</b>
屬性是和元素相關聯的,并且寫入到元素的開始标簽内的内容。
如<root id = '1' type = 'a'>,可以了解為:<root>元素擁有2個屬性,分别是id屬性和type屬性。
<b>3. </b><b>注釋</b>
包含在 <!-- 和 -->标簽之間的内容,用以說明XML文檔,示例中略。
如:<!-- 這是一條注釋。 -->
<b>4. </b><b>處理指令</b>
處理指令用來告訴解析XML的處理器,一些相關的應用資訊。
比如:<?xml version="1.0" encoding="UTF-8"?>
我除了在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 = "<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 = "梅花";
<{card1}>{con1}</{card1}>
<{card2}>決鬥</{card2}>
<{card1}>{con2}</{card1}>
<{card2}>雌雄雙股劍</{card2}>
采用變量的方式,對于用程式來實作XML是有極大友善的。<b>但這裡需要注意的是:不要把标簽的<>号也用變量來完成。</b>如var card1:String = "<Cardcolor>";這樣是會報錯的。
<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:我們要解析第二個<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的知識,内容會更加深入些。