0

我是 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()

没有运气。你能帮我,让我不明白为什么会这样吗?

谢谢你。

ps

该函数使用我需要解析的文件名调用,并且数组声明如下:

public var imagesURLs:Array = [];

我正在使用最新版本的 FLEX 和 flashDevelop

4

1 回答 1

2

您的第二个循环在“processXML”函数之前执行。此时你的 Array 是空的!只有当数据可用时才会调用您的“processXML”函数(异步调用)另外,不要忘记删除您的事件侦听器。

于 2011-01-20T16:48:25.727 回答