Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   чтение xml в массив на AS3 (http://www.flasher.ru/forum/showthread.php?t=101977)

quazare 06.10.2007 10:48

чтение xml в массив на AS3
 
Совершенно глупый попрос - возникла необходимость счить все значения xml в массив.

1.Я начал плясать от

Код:

public var exterXML:XML = new XML();
public var glArr: Array = new Array();

загрузил внешний XML в exterXML.

затем, написал маленькую функцию XMLtoArr() - основа которой вот такой цикл

Код:

for (var i=0; i<externalXML.length();i++){

glArr[i] = {// и вот здесь загвоздка, как достать содержание ноды?? //}

}


как быть? напоните как правильно сделать? Спасибо!

Пишеться это все на Flex...

etc 06.10.2007 11:06

Почему нельзя работать напрямую с XML без конвертации в сомнительный безформатный массив?

quazare 06.10.2007 11:15

А предложите вариант решения - мне надо это в комбобокс загнать... спасибо заранее...

Sneg 06.10.2007 11:50

Комбобокс может вполне работать с XMLList - в вашем случае должно все работать с externalXML.children(). А если уж так нужно в массив, то:
Код:

for each(var xmlNode:XML in externalXML.children())
{
  glArr.push(xmlNode)
}


etc 06.10.2007 11:53

Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:XML id="myXML" xmlns="">
        <root>
                <item>Text 0</item>
                <item>Text 1</item>
                <item>Text 2</item>
                <item>Text 3</item>
                <item>Text 4</item>
        </root>
</mx:XML>
        <mx:ComboBox x="84" y="106" dataProvider="{myXML.item}"></mx:ComboBox>
</mx:Application>

Для флекса у нас соответствующий раздел есть, кстати.

quazare 06.10.2007 13:10

Код:

public var externalXML:XML=new XML();       
public var cards:Array =new Array();

//----------------------------инициализация-----------------------       
        private function initApp():void {
                mdm.Application.init(this);   
               
                var loader:URLLoader = new URLLoader();
                var request:URLRequest = new URLRequest("xmlFile.xml");
                loader.load(request);
               
                loader.addEventListener(Event.COMPLETE, onComplete)
               
                XMLtoArr();
        }

private function XMLtoArr():void{
       
        //for (var i:Number=0; i<;i++){
        cards[0]=externalXML.children().length();
        Alert.show(cards[0]);

        //}

}
       
private function onComplete(event:Event):void {
    var loader:URLLoader = URLLoader(event.target);
    externalXML = XML(loader.data);
}

вообще проблема в функции XMLtoArr()...

Sneg 06.10.2007 13:24

Загрузка данных происходит асинхронно - вызывайте XMLtoArr после завершения загрузки и присвоения данных переменной externalXML.

p.s. названия методов лучше называть с маленькой буквы

quazare 06.10.2007 15:20

да понял - с загрузкой я разобрался...
теперь, хотелось бы сделать вот так:

Код:

for (var i:int=0; i<externalXML.children.lenght(); i++){

cards[i]= //вот здесь как обратиться к значению элнмента ноды, вообще, как к ним обращаются???//
}


Sneg 06.10.2007 15:44

Выложите пример вашего XML'ника - иначе не ясно как его разбирать.

quazare 06.10.2007 16:42

Спасибо все!
Я разобрался :victory:

Решилось это дело вот так

Код:

for (var i:int=0; i<extXML.children().length(); i++){

  cards[i] = extXML.children()[i].toString();

}

все работает :)
вот только теперь проблема = на комбобокс выдается замечание -

Код:

Data binding will not be able to detect assignments to "cards"
как это решить?


Часовой пояс GMT +4, время: 17:02.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.