2013-12-05 3 views
0

то, что я пытаюсь сделать, это загрузить файл XML и цикл по элементам этого, 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> 

и ActionScript я использую, чтобы получить к нему :

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() 

я не уверен, что я пройти с ним, его пр ob очень простая проблема, я просто полностью потерял то, что мне нужно сделать, спасибо

+0

Проблема заключается в том, что вы звоните 'convertdataRes(); 'в начале вашего кода .. – Cherniv

+0

, если я положил его в конце, после того, как я создал созданную функцию, я получаю: 1136: неправильное количество аргументов. Ожидаемый 1. – user2367312

+0

Проблема заключается в том, что функции нужно запустить объект 'Event', а ваш не передавать его в – CyanAngel

ответ

1

Мне кажется, что у вас есть пропущенный обработчик на слушателе Event.COMPLETE. Удалите "convertdataRes() вызов и изменить слушатель событий для:

xmlloaderRes.addEventListener(Event.COMPLETE, convertdataRes); 

этак ПОЛНОЕ событие будет послано в обработчик, а функция имеет объект события для обозначения.

+0

попробовал, что там, он бежал без каких-либо ошибок, но он не выдавал выход цикла for, dont знать, где проверить, что происходит сейчас – user2367312

+0

OK, теперь вам нужно получить узлы в объект XMLList. Вы можете извлечь узлы определенного имени с помощью опубликованногоList: XMLList = xml.device.cat или, как говорит самрад, получить все дочерние элементы withListList: XMLList = xml.device.children(); Затем вы можете прокручивать каждый узел xml с помощью: для каждого (var xmlNode: XML в методе listList) {// действие в xmlNode} – moosefetcher

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 
     */ 
} 
} 
Смежные вопросы