返回Actionscript中的解析XML值

时间:2011-03-19 05:42:06

标签: xml function actionscript

我正在尝试从Internet检索XML文件,解析它并从中返回一个值,所有这些都来自使用Actionscript 3.0的一个函数。

这是我的代码:

public function getValue(aWord:String):void
{    
    var xml:XML;
    var urlLoader:URLLoader = new URLLoader();
    urlLoader.addEventListener(Event.COMPLETE,onXMLLoaded);
    urlLoader.load(new  URLRequest("SOMEXMLFILE.xml")); // I use the aWord parameter in fetching the xml file


    function onXMLLoaded(e:Event):String{
        xml =  new XML(e.target.data);
        trace(xml);
        return (xml.bestmatch.dictionary.text());
    }
    return ""; //THIS NEEDS TO RETURN THE VALUE FOUND IN THE onXMLLoaded FUNCTION
}

理想情况下,可以将本地函数“onXMLLoaded”赋值给变量;例如

var text:String = function onXMLLoaded .....

然后我只返回变量“text”。但是,当我尝试这样做时,编译器会抱怨。如何将onXMLLoaded函数中找到的值返回给getValue函数的调用者?

谢谢!

1 个答案:

答案 0 :(得分:0)

您的var text:String = function onXMLLoaded ...提示不起作用,因为该声明正在做的是将onXMLLoaded函数本身(类型为Function)分配给text <{1}}类型的变量,这就是它不能编译的原因。

长话短说,就是在Actionscript中对外部源(例如XML,Web服务)进行同步调用没有简单的方法。对于那些来自典型的C / Java类型开发环境的人来说,这是非常令人生气的,包括我自己。在ActionScript中,很多典型的C语言中常见的设计模式是不可能的。您永远无法从同一函数返回URLLoader调用的结果;这就是语言的构建方式。

解决此问题的一种方法是将参数传递给函数并创建一个匿名函数,该函数在包含文本的对象上设置值,如下所示:

String

然后,您可以使用public function getValue(aWord:String, textToSetObject:Object):void { var xml:XML; var urlLoader:URLLoader = new URLLoader(); urlLoader.addEventListener(Event.COMPLETE, function (e:Event) : void { textToSetObject.text = new XML(e.target.data).bestmatch.dictionary.text(); } ); urlLoader.load(new URLRequest("SOMEXMLFILE.xml")); } 调用此函数,并在一段时间后getValue("string", someObject);将等于XML调用的结果。

关键词是它在一段时间之后。由于它是异步调用(即使它是本地XML文件),您将无法确切知道调用何时完成。如果您尝试执行someObject.text,则很可能会收到错误,因为当trace语句运行时,调用将无法完成。

希望这有点道理。理解AS3的异步架构是一个难题,非常重要。但是,总而言之:许多人已经尝试了很长时间并且难以适应AS3的同步调用,而且他们都被疯狂了。所以,不要这样做。