我想获取xml数据并将其放入对象数组中。我使用这种公共方法:
package
{
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class parseXML_public
{
static private var myXML:XML;
static private var xml_array:Array=new Array;
public function parseXML_public() {
}
public static function crearXMLArray(s:String):Array{
loadXML(s);
return xml_array;
}
static private function loadXML(s:String):void
{
var myURLRequest:URLRequest;
var myURLLoader: URLLoader;
myURLRequest = new URLRequest();
myURLRequest.url = s;
myURLLoader = new URLLoader();
myURLLoader.addEventListener(Event.COMPLETE, onXMLComplete);
myURLLoader.load(myURLRequest);
}
static private function onXMLComplete(e:Event):void
{
myXML = new XML(e.target.data);
parseXML();
}
static private function parseXML():void
{
var i:Number;
var j:Number;
var nodos:Number;
var my_obj:Object;
nodos = Math.floor(myXML.*.*.length() / (myXML.*.length()));
for (i = 0; i < myXML.*.length(); i++) {
xml_array[i] = new Array();
for (j = 0; j < nodos; j++) {
my_obj = new Object();
my_obj.nombre = myXML.child(i).child(j).@nombre;
my_obj.posX = myXML.child(i).child(j).@posX;
my_obj.posY = myXML.child(i).child(j).@posY;
xml_array[i].push(my_obj);
}
}
//trace(xml_array); //--> It shows the array charged!
}
}
}
当我从主类中调用数组时,我会这样做:
parseXML_public.crearXMLArray("xml/xml_tonalidades.xml"));
(如果我追踪它,数组是空的)我认为它与URLLoader有关并在返回之前等待它,但无法知道如何做...
答案 0 :(得分:0)
数组跟踪为空的原因是因为您需要等待它加载。这就是我要做的。
在主类中添加一个事件监听器以等待数据返回。
parseXML_public.addEventListener("xmlLoadComplete", doSomething);
parseXML_public.crearXMLArray("xml/xml_tonalidades.xml"));
function doSomething(e:Event){
// Array is ready now
}
在你的loader类中,当你想要触发事件时添加它。
this.dispatchEvent(new Event("xmlLoadComplete",true,false));
也许是这样的。
static private function parseXML():void
{
var i:Number;
var j:Number;
var nodos:Number;
var my_obj:Object;
nodos = Math.floor(myXML.*.*.length() / (myXML.*.length()));
for (i = 0; i < myXML.*.length(); i++) {
xml_array[i] = new Array();
for (j = 0; j < nodos; j++) {
my_obj = new Object();
my_obj.nombre = myXML.child(i).child(j).@nombre;
my_obj.posX = myXML.child(i).child(j).@posX;
my_obj.posY = myXML.child(i).child(j).@posY;
xml_array[i].push(my_obj);
}
}
this.dispatchEvent(new Event("xmlLoadComplete",true,false));
}
请记住,您可能必须导入一些事件类才能编译。祝你好运!