日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

ActionScript 3操作XML 詳解

 鬧海魚兒 2015-01-29

AS3引入了E4X ,它是根據(jù)ECMAScript標(biāo)準(zhǔn)處理XML 數(shù)據(jù)的全新機(jī)制。這使得程序員在程序中無縫地操作XML。在AS3中可以使用XML字面值將XML數(shù)據(jù)直接寫入代碼,該字面值將被自動(dòng)解析。

一、AS3中的XML入門

1.可以將XML直接寫入代碼

     

復(fù)制代碼
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>;
復(fù)制代碼

 

2.在字面值中使用as3的表達(dá)式:可以將ActionScript代碼直接嵌入到XML數(shù)據(jù)中,方法時(shí)將希望添加的代碼包圍在大括號{}中,這樣便可以使用動(dòng)態(tài)生成的值填充數(shù)據(jù)集合。

 

復(fù)制代碼
    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());
復(fù)制代碼

 

二、理解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)算符訪問元素

復(fù)制代碼
     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>;
復(fù)制代碼

使用點(diǎn)運(yùn)算符可以訪問movieList中的任何元素。只需要將訪問的元素作為movieList對象的屬性,寫出塔的名稱即可,如:movieList.listName
對擁有多個(gè)相同類型節(jié)點(diǎn)的元素,需要以數(shù)組的方式訪問,如 movieList.movie[0]

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)集合的長度

E、 name():Object返回正在訪問的子節(jié)點(diǎn)的節(jié)點(diǎn)名稱。


F、 elements(name:Object = *):XMLList 列出某XML對象的元素。

 

3.使用at運(yùn)算符@訪問屬性

trace(movieList.child("movie")[0].@id);
如果要訪問某標(biāo)記的所有屬性,可以使用*號,如trace(movieList.child("movie")[0].@*);
與.運(yùn)算符對應(yīng)的方法是child()和children()
與@運(yùn)算符對應(yīng)的方法是attribute()和attributes()

 

4.訪問元素中的文本

 

 要明確的返回某個(gè)元素的文本節(jié)點(diǎn),可以使用text()方法,該方法返回一個(gè)由文本節(jié)點(diǎn)組成的XMLList。
 注意:操作XML時(shí),toString()返回節(jié)點(diǎn)的值(可以為空),toXMLString()返回節(jié)點(diǎn)和其中的文本。

 

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對象。
  trace(movieList..title);//這個(gè)我真帥
  trace(movieList..@*.toXMLString());
  此運(yùn)算符對應(yīng)的方法為:descendants()
  使用此方法時(shí)需要注意一點(diǎn),它會返回所有匹配的結(jié)果,即使樹的不同層次上的標(biāo)記擁有相同的名稱也是如此。

訪問祖先結(jié)點(diǎn)
  parent()方法將返回特定XML對象的上一層的節(jié)點(diǎn)。

6.迭代元素的子節(jié)點(diǎn)

復(fù)制代碼
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);
              }
復(fù)制代碼

 

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中。
  var movies:XMLList=movieList.movie.(year>1985);
  trace(movies);
  movies=movieList.movie.(@id=="789");
  trace(movies);
  movies=movieList.movie.(director.search("W")!=-1 && title.search(" ")==-1);
  trace(movies);

四、構(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">
   <title>Tron</title>
   <year>1982</year>
   <director>Steven Lisberger</director>
  </movie>;
  movieList.movie+=anotherMovie;

appendChild():與+=類似,將值添加到XML對象或XMLList的末尾。
  prependChild():將值添加到對象的開始部分。
  insertChildAfter()、insertChildBefore():將值添加到指定位置。

  movieList.movie[0].appendChild(<area>你</area>);
  movieList.movie[1].prependChild(<area>真</area>);
  movieList.movie[2].insertChildBefore(movieList.movie[2].year,<area>棒</area>);
  movieList.movie[3].insertChildAfter(movieList.movie[3].year,<area>呀</area>);

 

2.刪除XML節(jié)點(diǎn)

與結(jié)合XML結(jié)點(diǎn)不同,沒有任何方法可以刪除XML節(jié)點(diǎn),相反,只能使用delete運(yùn)算符。該運(yùn)算符用于從樹中刪除指定的元素或值。
  delete movieList.movie.@*;//刪除所有屬性
  delete movieList.movie[1];

 

3.復(fù)制XML對象

 使用copy方法復(fù)制XML對象。
  var template:XML=<person><name><first /><last /></name></person>;
  var me:XML=template;//me引用template,對me的修改也是對template的修改
  var it:XML=template.copy();//創(chuàng)建副本
  me.name.first="First Name";
  me.name.last="Last Name";

4.替換XML節(jié)點(diǎn)中的值

setChildren()方法可以一次替換XML對象中的所有節(jié)點(diǎn)
replace()方法則替換XML對象中的單個(gè)節(jié)點(diǎn)
var m123:XMLList=movieList.movie.(@id==123);
//m123.setChildren(null);
m123.setChildren(<title>Avatar</title>+<year>2009</year>+<director>Cameron</director>);//注意使用+號連接多個(gè)節(jié)點(diǎn)
m123.replace("title",<title>阿凡達(dá)</title>);

5.與字符串相互轉(zhuǎn)換

 將字符串轉(zhuǎn)換為XML時(shí)需要格外注意,只能使用格式良好的XML文本,操作失敗將會造成運(yùn)行時(shí)錯(cuò)誤。
  var xml:XML=XML(xmlString);
  美觀打印
  XML.prettyPrinting:默認(rèn)值為true,將其設(shè)置為false時(shí),XML字符串將自動(dòng)格式化、刪除空標(biāo)記和額外的空白符。
  XML.prettyIndent:默認(rèn)值為2,設(shè)置縮進(jìn)的空格數(shù)

五、從外部資源加載XML數(shù)據(jù)

 

復(fù)制代碼
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);
                      }
              };
復(fù)制代碼

 

六、收集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)容類型
hasComplexContent():復(fù)雜內(nèi)容類型

 

七、使用命名空間、使用注釋和處理命令、設(shè)置XML類型選項(xiàng)

 ☆使用名稱空間
  
名稱空間是在XML中使用的一種約定,其作用是將功能相似的XML元素和屬性歸入同一集合中,這與使用包對類進(jìn)行分類極為相似。XML文件將在名稱空間聲明中定義名稱空間的名稱和一個(gè)惟一的標(biāo)識符,用于將它與其他名稱空間區(qū)分開來。
  var ns:Namespace=new Namespace(uri);//省略前綴
  var ns:Namespace=new Namespace(prefix,uri);
  示例
  var diffbook:XML=<book xmlns:bible="http://www.">
   <bible:chapter>Working with XML</bible:chapter>
  </book>;
  可以使用名稱空間訪問節(jié)點(diǎn)——雙冒號(::)結(jié)合名稱空間對象來訪問非默認(rèn)名稱空間的節(jié)點(diǎn),如
  var bible:Namespace=diffbook.namespace("bible");
  trace(bible);//http://www.
  trace(bible.prefix);//bible
  trace(bible.uri);//http://www.
  trace(diffbook.bible::chapter);//Working with XML
  trace(diffbook.bible::chapter.name());//http://www.::chapter
  trace(diffbook.bible::chapter.localName());//chapter
  相關(guān)方法addNamespace()、removeNamespace()、setNamespace()、localName()參閱幫助文檔。

☆使用注釋和處理指令
  
代碼中包含的XML注釋塊和處理指令都不是節(jié)點(diǎn),要訪問這些值,可以使用comments()和processingInstructions()方法分別獲取注釋和處理指令的XMLList。
  注意,靜態(tài)屬性ignoreComments和ignoreProcessingInstructions的默認(rèn)值都是true,需要將它們設(shè)置為false才能保證comments()和processingInstructions()方法能夠正常運(yùn)行。

☆設(shè)置XML類的選項(xiàng)
  
ignoreWhitespace
  ignoreComments
  ignoreProcessingInstructions
  prettyPrinting
  prettyIndent
  可以使用settings()靜態(tài)方法訪問所有這些設(shè)置,它將返回一個(gè)含有各變量值的對象。
  還可以使用defaultSettings()靜態(tài)方法獲取所有這些屬性的默認(rèn)值,setSettings()靜態(tài)方法可用于將settings對象修改為新Object。
  XML.setSettings(XML.defaultSettings());//將XML設(shè)置恢復(fù)為默認(rèn)值


    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多