2010-01-18 67 views
1

我需要解析XML是這樣的:解析XML在Actionscript中

<?xml version='1.0' encoding='UTF-8' standalone='yes'?> 
<pictures> 

    <pic> 
     <name>clouds1</name> 
     <file>clouds1.jpg</file> 
     <date>20/12/09</date> 
    </pic> 

    <pic>..........</pic> 
    .... 

</pictures> 

使用ActionScript。

我有這樣的:

constructor{ 
    var loader = new URLLoader(new URLRequest("data.xml")); 
    loader.addEventListener(Event.COMPLETE, loadedCompleteHandler); 

    //code that need the arrays created on the function below. This code cannot be in the function below 
} 

private function loadedCompleteHandler(e:Event):void 
{ 
    e.target.removeEventListener(Event.COMPLETE, loadedCompleteHandler); 
    _xml = XML(e.target.data); 

    for(var i:int = 0 ; i <= _xml.object.length() ; i++){ 
     var object:XML = _xml.object[i]; 
     nameArray[i] = object.name; 
     fileArray[i] = object.file; 
     dateArray[i] = object.date; 
    } 
} 

,但我想等到XML是滿載。看起來,當我在構造函數中調用它時,程序會生成一個「線程」,並將數組的執行繼續爲空,因爲它需要更多時間來加載。 我需要在構造函數中運行全部。

非常感謝你

回答

1

如果你在一個Adobe AIR環境與本地XML文件時,您可以使用FileStream類,使您的XML文件加載同步。

var file:File = File.applicationDirectory.resolvePath("myFile.xml"); 
var fileStream:FileStream = new FileStream(); 
fileStream.open(file, FileMode.READ); 
var rawData:String = fileStream.readUTFBytes(fileStream.bytesAvailable); 
fileStream.close(); 
var out:XML = XML(rawData); 
// XML parsing stuff here 
0

沒有線程。
Actionscript是單線程*。

xml將開始加載,並且函數loadedCompleteHandler()將在文件完全加載後運行。沒有辦法暫停執行(即發出同步請求)。

你需要做的是讓你的loadedCompleteHandler調用另一個繼續你在構造函數中開始的函數。另一個選擇是在調用構造函數之前加載xml或在swf中嵌入xml。

*也有例外,但讓我們跳過他們簡單

+0

以及如何在調用構造函數之前加載XML? – isiaatz 2010-01-18 12:59:01

+0

你不能......你需要將你的初始化例程移動到另一個函數,並在加載和解析XML之後調用它。 – Cay 2010-01-18 15:16:28