Форум Flasher.ru

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

asuri 14.02.2007 22:53

Формирование ArrayCollection из xml
 
Добрый вечер всем.
Хочу формировать налету ArrayCollection. Изначально данные забираю с сервера в виде XML.
Трабла в том, что ArrayCollection должен быть вида:
Код:

<mx:ArrayCollection id="mxarr">
        <mx:Object  label="ColName1" text="3 jj gehg"/>
        <mx:Object  label="ColName2" text="32ggehg"/>
</mx:ArrayCollection>

атрибуты (label,text) и прочие хранятся в массиве headers.
При этом я не могу динамически создать у элементов ArrayCollection аттрибуды с соответствующими именами.

То есть надо сделать что то вроде:
Код:

var MyXML:XML;
var headers:Array=new Array("label","data");
MyXML = new XML('<root><node id="MyNode" /></root>');
MyXML.node.@headers[0]='bla bla bla';

но разумеется строка MyXML.node.@headers[0]='bla bla bla'; не прокатывает.
Вопрос №1 - какая есть альтернатива этой строке.
Вопрос №2 - если сделать trace(MyXML.children()); то результат - пустая строка. Почему так???

Что бы лучше было все понятно - привожу полный код:

Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  layout="absolute">
        <mx:Script>
                <![CDATA[
                       
                        import mx.collections.ArrayCollection;
                        public function test_xml():void{
                                var ac:ArrayCollection;
                                var tmp:Array;
                                var MyXML:XML;
                                var headers:Array=new Array("id","title");
                                MyXML = new XML('<root><node id="MyNode" /></root>');
                                MyXML.node.@label='txt';
                                trace(MyXML.children());
                               
                                tmp=new Array(MyXML);
                                ac = new ArrayCollection(tmp);
                                trace('\n=============\n');
                                show(ac);
//                                show(mxarr);
                        }
                       
                       
                        public function show(obj:ArrayCollection):void{
                                for(var i:int=0;i<obj.length;i++){
                                        trace('obj['+i+']=Array(');
                                        var a:Object;
                                        for(a in obj[i]){
                                        trace('        '+a+' => '+obj[i][a]+'\a');
                                        }
                                        trace(');\n');
                                }
                        }
                       
                       
                ]]>
        </mx:Script>
       
        <mx:ArrayCollection id="mxarr">
                <mx:Object id="a" label="lab1" text="3 jj gehg"/>
                <mx:Object id="b" label="lab2" text="32ggehg"/>
        </mx:ArrayCollection>
       
        <mx:Button  label="test" click="test_xml();"  x="100" y="100"/>
</mx:Application>


barby 20.02.2007 20:57

Ответ №1: альтернативу на нашел, можно добавлять циклом во время MyXML = new XML().
Ответ №2: потому что неправильно используете. Попробуйте trace(MyXML.children().toXMLString())

ex.image 20.02.2007 21:12

А можно узнать практическое применение данного творения?
Может есть альтернативный способ решения практической задачи.

asuri 22.02.2007 18:39

Да уже решил проблему.. Спасибо )


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

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