2011-10-21 65 views
0

從XML源讀取數據後,我喜歡能夠隨時顯示數據中的一個隨機項,比如說,單擊一個按鈕。我想我可以通過將數據存儲到數組中並使用它來完成此任務。
我想了解如果可能,直接從xml中執行它,而不將它存儲到另一個數組中。在此先感謝as3隨機訪問XML數據

var myXMLLoader:URLLoader = new URLLoader(); 
myXMLLoader.load(new URLRequest("XML_NOTES.xml")); 
myXMLLoader.addEventListener(Event.COMPLETE, processXML); 


function processXML(e:Event):void { 
      var loader:URLLoader = e.target as URLLoader; 
      var myXML:XML = new XML(loader.data); 
      for (i=0;i<2;i++){ 
      trace(myXML.LEMMA[i]); 
      array.push(myXML.LEMMA[i]); 
      } 

} 

回答

0

您可以直接從myXML變量做到這一點,你需要設置myXML作爲一個全局變量:

var myXML:XML; 
var myXMLLoader:URLLoader = new URLLoader(); 
myXMLLoader.load(new URLRequest("XML_NOTES.xml")); 
myXMLLoader.addEventListener(Event.COMPLETE, processXML); 

function processXML(e:Event):void { 
    var loader:URLLoader = e.target as URLLoader; 
    myXML = new XML(loader.data); 
} 

function getRandomItem():XML { 
    var elementsCount:int = myXML.LEMMA.length(); 
    var randomIndex:int = Math.floor(Math.random() * (elementsCount-1)); 
    return myXML.LEMMA[randomIndex]; 
} 
+0

我需要用event.complete不給面子裝載問題或沒有 – mustafa

+0

是的,這是必要的因爲在這種情況下你會得到你的xml內容。 – Bartek

+0

是的......我明白了。非常感謝你。 – mustafa

0

如果我理解正確的問題:

function processXML(event:Event):void 
{ 
    var myXML:XML = XML((e.target as URLLoader).data); 
    var children:XMLList = myXML.*; 
    trace(children[Math.random() * children.length()].toXMLstring()); 
} 

注意的是,雖然它被稱爲XML 列表,它實際上是一個數組,更多的是,它是一個真正的陣列(密集)不像Array類:)(它是一個數組和字符串散列的混合)。因此,按索引訪問元素沒有問題 - 無需轉換爲數組。