PDA

View Full Version : Returning text from a class that loads XML data



tpann
December 19th, 2007, 04:23 PM
I am able to use a class to load XML data, as in Moock's "Essential ActionScript 3.0". However, what I'm learning from Moock generally is limited to tracing XML data once it's loaded (or maybe I'm not reading far enough). What I need is to have my class RETURN a text string so that I can use it for other stuff.

Here's class XMLLoader:


package {
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;

public class XMLLoader extends Sprite {
private var xmlData:XML;
private var urlLoader:URLLoader;

public function XMLLoader(arg_filename:String) {
var xmlFile:String = arg_filename;
var urlRequest:URLRequest = new URLRequest(xmlFile);
urlLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, completeListener);
urlLoader.load(urlRequest);
}
private function completeListener(e:Event) {
var xmlData:XML = new XML(e.target.data);
trace("xmlData = " + xmlData.PAR1.toString());
return xmlData.PAR1.toString();
}
}
}
... which I call from my .FLA file with:


var t1 = new XMLLoader("text/content.xml");
trace("t1 = " + t1);

content.xml looks like:


<?xml version="1.0" encoding="utf-8"?>
<CONTENT>
<PAR1>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</PAR1>
</CONTENT>
The trace in the XMLLoader class accurately displays my "Lorem ipsum" string. However, I want t1, the variable I'm using to invoke XMLLoader, to be a string with that text as its value. As you can probably guess, the trace function in my FLA file (trace(t1)) shows t1 to just be [object XMLLoader].

How do I change what I have in order for t1 (or some other variable I could define in my FLA file) to have my "Lorem ipsum" string assigned to it?

Thanks!

dail
December 19th, 2007, 05:39 PM
Try this approach;

package {
import flash.display.Sprite;
import flash.display.Loader;
import flash.events.*;
import flash.net.URLRequest;
import flash.net.URLLoader;

public class loadXml extends Sprite {
public var myXML:XML;
public var myXLoader:URLLoader
private var myXMLURL:URLRequest
private var XML_URL:String

public function loadXml(url:String, callBack:Function) {
myXML = new XML();
XML_URL = url;
myXMLURL = new URLRequest(XML_URL);
myXLoader = new URLLoader(myXMLURL);
myXLoader.addEventListener("complete", callBack);
}

}
}

And in your .fla;

//load in xml via call to external xml parsing class
var menuXML:XML = new XML();
var myloadXml:loadXml = new loadXml("menu.xml", checkLoad);

//call back function for xml loading
function checkLoad(evt:Event):void {
menuXML = XML(evt.target.data);
var theText:String = menuXML.PAR1.text()[0]
}

Felixz
December 20th, 2007, 07:57 AM
Functions from listeners should return nothing, instead
private var returnedValue:String;
private function completeListener(e:Event) {
var xmlData:XML = new XML(e.target.data);
trace("xmlData = " + xmlData.PAR1.toString());
returnedValue=xmlData.PAR1.toString();
}
override public function toString():String {
return returnedValue;
}
Something like that