在Actionscript中解析XML

时间:2010-01-18 11:59:18

标签: xml actionscript-3 actionscript

我需要像这样解析XML:

<?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完全加载。似乎当我在构造函数中调用它时,程序会生成一个“线程”并继续执行数组为null,因为它需要更多的时间来加载。 我需要在构造函数中运行所有。

非常感谢

2 个答案:

答案 0 :(得分:1)

如果您在使用本地xml文件的Adobe AIR环境中工作,则可以使用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

答案 1 :(得分:0)

没有线程。
Actionscript是单线程*。

xml将开始加载,一旦文件完全加载,函数loadedCompleteHandler()将运行。没有办法暂停执行(即发出同步请求)。

您需要做的是让您的loadedCompleteHandler调用另一个继续您在构造函数中启动的函数。另一个选择是在调用构造函数之前加载xml或在swf中嵌入xml。

*有异常,但为了简单起见,我们跳过它们