Разбор XML в Actionscript - PullRequest
       24

Разбор XML в Actionscript

1 голос
/ 18 января 2010

Мне нужно проанализировать 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 полностью загружен.Кажется, что когда я вызываю его в конструкторе, программа создает «поток» и продолжает выполнение с массивами, равными нулю, потому что ей нужно больше времени для загрузки.Мне нужно запустить все в конструкторе.

Большое спасибо

Ответы [ 2 ]

1 голос
/ 18 января 2010

Если вы работаете в среде 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 голосов
/ 18 января 2010

Нет созданных тем.
Actionscript является однопоточным *.

Будет загружен xml, и функция loadedCompleteHandler() запустится после полной загрузки файла. Невозможно приостановить выполнение (т. Е. Сделать синхронный запрос).

То, что вам нужно сделать, это сделать, чтобы ваш selectedCompleteHandler вызывал другую функцию, которая продолжает то, что вы начали в конструкторе. Другой вариант - либо загрузить xml перед вызовом конструктора, либо встроить xml в swf.

* есть исключения, но давайте их пропустим для простоты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...