AS3引入了E4X ,它是根據(jù)ECMAScript標(biāo)準(zhǔn)處理XML 數(shù)據(jù)的全新機(jī)制。這使得程序員在程序中無縫地操作XML。在AS3中可以使用XML字面值將XML數(shù)據(jù)直接寫入代碼,該字面值將被自動(dòng)解析。 一、AS3中的XML入門 1.可以將XML直接寫入代碼
public var employeelist:XML=<employeelist> <employee> <name first="Conan" last="O'Brien" /> <title>Host</title> </employee> <employee> <name first="Andy" last="Richter" /> <title>SideKick</title> </employee> </employeelist>;
2.在字面值中使用as3的表達(dá)式:可以將ActionScript代碼直接嵌入到XML數(shù)據(jù)中,方法時(shí)將希望添加的代碼包圍在大括號{}中,這樣便可以使用動(dòng)態(tài)生成的值填充數(shù)據(jù)集合。
var efname:String="A"; var elname:int=1; var etitle:String="+"; var employeelist:XML=<employeelist> <employee> <name first={efname} last={elname} /> <title>{etitle}</title> </employee> </employeelist>; trace(employeelist.toXMLString());
二、理解XML類 每個(gè)類都表示不同的數(shù)據(jù)類型,可以在操作XML數(shù)據(jù)時(shí)使用它們。它們都位于ActionScript API 的頂層,不需要import 語句便可以使用它們。 XML:XML對象表示一塊簡單的XML數(shù)據(jù),如元素、文本節(jié)點(diǎn)、注釋或處理指令。將所有這些不同的節(jié)點(diǎn)定義為XML對象,可以對它們使用操作XML數(shù)據(jù)的方法,而不必?fù)?dān)心它們的類型是什么。 XMLList :是XML對象的有序集合,包含在其中的XML數(shù)據(jù)可以是一個(gè)或者多個(gè)XML對象,XML對象的部分或一些單獨(dú)的節(jié)點(diǎn)。XML類的一些方法,如children() ,將返回XMLList形式的結(jié)果。XMLList擁有許多與XML類相同的方法,大多數(shù)操作都可以交替使用。注意,XMLList中的項(xiàng)目是平行存在的,它們都沒有父節(jié)點(diǎn)。
三、通過E4X訪問XML 1.使用點(diǎn)運(yùn)算符訪問元素 public var movieList:XML=<movieList> <listName>My Favorite movies</listName> <movie id="123"> <title>Titus</title> <year>1999</year> <director>Julie Taymor</director> </movie> <movie id="456"> <title>Rushmore</title> <year>1998</year> <director>Wes Anderson</director> </movie> <movie id="789"> <title>Annie Hall</title> <year>1977</year> <director>Woody Allen</director> </movie> </movieList>; 使用點(diǎn)運(yùn)算符可以訪問movieList中的任何元素。只需要將訪問的元素作為movieList對象的屬性,寫出塔的名稱即可,如:movieList.listName 2.使用方法訪問子節(jié)點(diǎn) A、 child(propertyName:Object):XMLList 獲取特定子節(jié)點(diǎn)集合,如movieList.child("movie") 與movieList .movie相同,使用它可以搜索指定名稱的任何字節(jié)點(diǎn),如movieList.movie.child("title") 。 使用propertyName參數(shù)可列出特定XML子項(xiàng)的內(nèi)容。列如,若要返回名為<title> 使用子項(xiàng)的索引編號,可以生成相同的結(jié)果。索引編號標(biāo)示該子項(xiàng)在其XML子項(xiàng)列中的位置。例如,movieList.child(0)將返回列表中的第一個(gè)子項(xiàng)。 使用星號(*)可以返回xml文檔中所有的子項(xiàng),例如,moveList.child("*").
B、childIndex():int 確定該XML對象在其父項(xiàng)上下文中從0開始編制索引的位置。 如:trace(movieList.child(2).child("director").childIndex()); trace(movieList.movie[0].year.childIndex());
C、 children():XMLList 按XML對象的顯示順序列出其子項(xiàng)。根據(jù)下標(biāo)獲取子元素,如: trace(movieList.children()[0].toXMLString()); trace(movieList.children()[2].children()[0].toXMLString()); D、 length():int返回特定子節(jié)點(diǎn)集合的長度
3.使用at運(yùn)算符@訪問屬性 trace(movieList.child("movie")[0].@id);
4.訪問元素中的文本
要明確的返回某個(gè)元素的文本節(jié)點(diǎn),可以使用text()方法,該方法返回一個(gè)由文本節(jié)點(diǎn)組成的XMLList。
5.訪問祖先節(jié)點(diǎn)、訪問子孫節(jié)點(diǎn)
E4X中的一個(gè)非常強(qiáng)大的特性就是能夠直接訪問子孫節(jié)點(diǎn)。使用子孫節(jié)點(diǎn)存取程序運(yùn)算符(..),可以深入訪問元素中的節(jié)點(diǎn),而不用擔(dān)心該節(jié)點(diǎn)的路徑是什么。這種方法不僅適用于元素,而且還適用于屬性和其他類型的XML對象。 訪問祖先結(jié)點(diǎn) 6.迭代元素的子節(jié)點(diǎn) XMLList類似專用于存儲XML數(shù)據(jù)段的數(shù)組,它們與數(shù)組一樣擁有長度和下標(biāo),可以像操作數(shù)組那樣對它們執(zhí)行迭代操作。 var movieTitles:Array=new Array(); var movies:XMLList=movieList.movie; for(var i:int=0;i<movies.length();i++){ movieTitles[i]=movies[i].title.text(); } movieTitles.sort(); trace(movieTitles); 此外,可以使用for...in或for each...in語句迭代XMLList對象 var movies:XMLList=movieList.movie; for(var movie:String in movies){ trace(movies[movie].title); } var movies:XMLList=movieList.movie; for each(var movie:XML in movies){ trace(movie.title); }
7.篩選XML中的項(xiàng)目 EX4增加了一種強(qiáng)大的功能:使用XML圓括號篩選運(yùn)算符動(dòng)態(tài)地篩選數(shù)據(jù)。在XML樹中創(chuàng)建路徑時(shí),可以在圓括號中間添加一個(gè)布爾表達(dá)式形式的搜索來判斷條件,符合搜索條件的任何節(jié)點(diǎn)都將返回到一個(gè)XMLList中。 四、構(gòu)建XML對象 1.結(jié)合XML節(jié)點(diǎn) 與合并字符串類似,可以使用+或+=運(yùn)算符將額外的子元素添加到某個(gè)XMLList中。所添加的值不需要與XML對象中其他元素保持相同的格式。可以使用+和+=運(yùn)算符將額外的節(jié)點(diǎn)添加到具體元素中。 var anotherMovie:XML=<movie id="222">
2.刪除XML節(jié)點(diǎn) 與結(jié)合XML結(jié)點(diǎn)不同,沒有任何方法可以刪除XML節(jié)點(diǎn),相反,只能使用delete運(yùn)算符。該運(yùn)算符用于從樹中刪除指定的元素或值。
3.復(fù)制XML對象 使用copy方法復(fù)制XML對象。 4.替換XML節(jié)點(diǎn)中的值 setChildren()方法可以一次替換XML對象中的所有節(jié)點(diǎn) 5.與字符串相互轉(zhuǎn)換 將字符串轉(zhuǎn)換為XML時(shí)需要格外注意,只能使用格式良好的XML文本,操作失敗將會造成運(yùn)行時(shí)錯(cuò)誤。 五、從外部資源加載XML數(shù)據(jù)
import flash.net.*; var movieList:XML; var url:URLRequest=new URLRequest("movieList.xml"); var loader:URLLoader=new URLLoader(url); loader.addEventListener(Event.COMPLETE,onLoadCompleted); function onLoadCompleted(e:Event):void{ if(loader.data){ movieList=XML(loader.data); trace(movieList); } };
六、收集XML節(jié)點(diǎn)的元信息 1.查找節(jié)點(diǎn)類型 要判斷當(dāng)前節(jié)點(diǎn)的類型,可以對要檢查的分支使用nodeKind()方法。該方法返回一個(gè)描述節(jié)點(diǎn)類型的字符串:element attribute text comment processing-instruction 2.判斷節(jié)點(diǎn)內(nèi)容的類型
hasSimpleContent():簡單內(nèi)容類型
七、使用命名空間、使用注釋和處理命令、設(shè)置XML類型選項(xiàng) ☆使用名稱空間 |
|