我想要做的是加载一个xml文件并循环遍历它的元素,xml的结构如下:
<root>
<device>
<cat>image</cat>
<sub_cat>dslr</sub_cat>
<booked>-1</booked>
<pre_book_st>1/1/2013</pre_book_st>
<book_len></book_len>
<user>R000XXXY</user>
</device>
</root>
我正在使用的动作脚本是:
convertdataRes();
import flash.display.MovieClip;
var xmlloaderRes:URLLoader = new URLLoader();
var xmlreqRes:URLRequest = new URLRequest("resources.xml");
xmlloaderRes.load(xmlreqRes);
trace("xml loader res "+ xmlloaderRes);
xmlloaderRes.addEventListener(Event.COMPLETE, convertdata);
function convertdataRes(event:Event=null):void
{
var xmlinfo:XML = new XML(event.target.data);
var postedlist:XMLList = xmlinfo.device;
var totallist:Number = postedlist.length();
for(var i:int=0 ; i < totallist ; i++)
{
trace(i);
trace("before");
trace("xmlinfo.device.cat[i] ="+xmlinfo.device.cat[i]);
trace("after");
}
}
但是当我运行它时,我不断收到错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at v0_fla::MainTimeline/convertdataRes()
at v0_fla::MainTimeline/frame1()
我不确定我要传递的是什么,这可能是一个非常基本的问题我只是完全迷失了我需要做什么,谢谢
答案 0 :(得分:1)
在我看来,你在Event.COMPLETE监听器上错过了命名处理程序。删除'convertdataRes()'调用并将事件侦听器更改为:
xmlloaderRes.addEventListener(Event.COMPLETE, convertdataRes);
这样COMPLETE事件就会传递给你的处理程序,并且该函数有一个要引用的事件对象。
答案 1 :(得分:0)
这样,您就可以遍历device
中的每个孩子并获取值,这样您就不必硬编码cat
import flash.events.Event;
var xml:XML = <root><device><cat>image</cat><sub_cat>dslr</sub_cat><booked>-1</booked> <pre_book_st>1/1/2013</pre_book_st><book_len></book_len><user>R000XXXY</user></device></root>;
convertData();
function convertData(event:Event=null):void{
var postedlist:XMLList = xml.device.children();
var totallist:Number = postedlist.length();
for(var i:int=0 ; i < totallist ; i++)
{
trace(postedlist[i]);
/* --traces --
image
dslr
-1
1/1/2013
R000XXXY
*/
}
}