循环遍历xml文件

时间:2013-12-05 12:13:55

标签: xml actionscript-3

我想要做的是加载一个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()

我不确定我要传递的是什么,这可能是一个非常基本的问题我只是完全迷失了我需要做什么,谢谢

2 个答案:

答案 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
        */
 }
}