我需要像这样解析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,因为它需要更多的时间来加载。 我需要在构造函数中运行所有。
非常感谢
答案 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。
*有异常,但为了简单起见,我们跳过它们