PDA

Просмотр полной версии : Формирование ArrayCollection из xml


asuri
14.02.2007, 22:53
Добрый вечер всем.
Хочу формировать налету 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
Да уже решил проблему.. Спасибо )