XML-значение as3 в массив.Не могу заставить это работать - PullRequest
0 голосов
/ 20 января 2011

Я нуб с as3 и пытаюсь учиться.

Это то, чего я не могу понять. У меня очень простой XML:

<?xml version="1.0" encoding="utf-8"?>
<SLIDES>
    <IMAGE>01.jpg</IMAGE>
    <IMAGE>02.jpg</IMAGE>
    <IMAGE>03.jpg</IMAGE>
    <IMAGE>04.jpg</IMAGE>
    <IMAGE>05.jpg</IMAGE>
</SLIDES>

что я разбираю вот так:

private function loadXML(filename:String):void {
            var myXML:XML;
            var myLoader:URLLoader = new URLLoader();
            myLoader.load(new URLRequest(filename+".xml"));
            myLoader.addEventListener(Event.COMPLETE, processXML);

            function processXML(e:Event):void {
                myXML = new XML(e.target.data);
                myXML.ignoreWhite=true;

                for (var i:int = 0; i < myXML.IMAGE.length(); i++) {
                    imagesURLs.push(myXML.IMAGE[i]);
                    trace(myXML.IMAGE[i]);
                }
            }
            for each (var imageURL:String in imagesURLs) {
                trace(imageURL);
            }
        }

Возвращает первый след:

01.jpg
02.jpg
03.jpg
04.jpg
05.jpg

Пока второе пусто! Зачем? Я действительно начинаю сходить с ума. Я также попробовал:

myXML.IMAGE[i].toXMLString()

Без удачи. Не могли бы вы помочь мне и заставить меня понять, почему это происходит?

Спасибо.

приписка

Функция вызывается с именем файла, которое мне нужно проанализировать, и массив объявляется так:

public var imagesURLs:Array = [];

Я использую последнюю версию FLEX с flashDevelop

1 Ответ

2 голосов
/ 20 января 2011

Ваш второй цикл выполняется перед функцией 'processXML'. В это время ваш массив пуст! Ваша функция 'processXML' будет вызываться только тогда, когда будут доступны данные (асинхронный вызов) Также не забудьте удалить прослушиватель событий.

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