Просмотр полной версии : [AS3]Как конвертировать XML в массив
Есть XML:
<items>
<item>
<title>Название работы 1</title>
<date>2006-02-06</date>
</item>
<item>
<title>Название работы 2</title>
<date>2005-10-07</date>
</item>
<item>
<title>Название работы 3</title>
<date>2005-09-07</date>
</item>
</items>
Как из него получить такой массив?:
[
{title: 'Название работы 1', date: '2006-02-06'},
{title: 'Название работы 2', date: '2005-10-07'},
{title: 'Название работы 3', date: '2005-09-07'}
]
А чем тебя не устраивает сам XML? Зачем менять структуру?
причем тут FLEX?
перенес в раздел для новичков, раз пользователь не знает как слово "парсинг"
А чем тебя не устраивает сам XML? Зачем менять структуру?
Устраивает... просто, я не нашел другого способа програмно отсортировать поля DataGrid.
Динамически наполняю DataGrid несколькими подобными ХML'ами, и поля перед показом нужно отсортировать по дате
<mx:Script>
<![CDATA[
...
loadXML('how/id.xml');
loadXML('how/card.xml'); // гружу несколько XML ...
how1Filter = myXML2..item; // XMLList для DataGrid
]]>
</mx:Script>
<mx:DataGrid id="how1Grid" dataProvider="{how1Filter}" >
<mx:columns>
<mx:DataGridColumn dataField="title" headerText="title"/>
<mx:DataGridColumn dataField="date" headerText="date" />
</mx:columns>
</mx:DataGrid>
Узнал что в 1.5 был SortItemsBy(); , в двойке нет такого, по хелпу ("Sorting data in DataGrid controls") :(
причем тут FLEX?
перенес в раздел для новичков, раз пользователь не знает как слово "парсинг"
Слово знаю, пользоватся не научусь никак...
во Флексе знаю два способа импортирования XML:
1) HTTPService
2) URLLoader
Вот пробую первым , почему он мне трэйсит не массив а тот же XML?
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="dsWorks.send();">
<mx:Script><![CDATA[
import mx.collections.XMLListCollection;
import mx.rpc.events.ResultEvent;
import mx.utils.ArrayUtil;
public var XML2Array:Array;
private function onResult(oEvent:ResultEvent):void
{
var xlcDP:XMLListCollection = new XMLListCollection(oEvent.result.item);
XML2Array = ArrayUtil.toArray(xlcDP);
trace(XML2Array);
}//onResult
]]></mx:Script>
<mx:HTTPService id="dsWorks" url="assets/card.xml" result="onResult(event)" resultFormat="e4x"/>
</mx:Application>
А нельзя никак передавать значения в атрибутах? Зачем плодить лишние узлы, да еще и текстовые?
можно открыть поиск и ввести слова "парсинг XML" и не парится и ждать ответа=)
можно открыть поиск и ввести слова "парсинг XML" и не парится и ждать ответа=)
нашел топик Оптимизация разбора ХМЛ (http://flasher.ru/forum/showthread.php?t=70447&highlight=%EF%E0%F0%F1%E8%ED%E3)
там:
...
в 99 процентах случаев нужно работать с XML.
...
Абсурдно удалять то, что помогает работать с данными.
В моем случае то же? (динамически собираю XMLList, не могу остортировать :rtfm:)
Если да, то подскажи как отсортировать узлы <item>...</item> по дате которая в <item><date>...</date></item> .
А нельзя никак передавать значения в атрибутах?
Рад бы... незнаю как?
Зачем плодить лишние узлы, да еще и текстовые?
Мне нужно наполнить осортированными узлами:
<mx:DataGrid>
<mx:columns>
<mx:DataGridColumn dataField="title" headerText="title"/>
<mx:DataGridColumn dataField="date" headerText="date" />
</mx:columns>
</mx:DataGrid>
Есть ли методы у DataGrid или DataGridColumn, чтобы выводить поля в порядке убывания даты?
Есть XML:
<items>
<item>
<title>Название работы 1</title>
<date>2006-02-06</date>
</item>
<item>
<title>Название работы 2</title>
<date>2005-10-07</date>
</item>
<item>
<title>Название работы 3</title>
<date>2005-09-07</date>
</item>
</items>
Привести к виду
<items>
<item title="Название работы 1" date="2005-09-07"/>
<item title="Название работы 2" date="2005-08-07"/>
<item title="Название работы 3" date="2005-06-07"/>
</items>
а потом через nextSibling просматривать атрибуты и генерить другой ХМЛ в зависимости от значения атрибута... Есть такая ф-ция как insertBefore(); проверяем циклом нужный аттрибут, если значение больше - добавляем узел после, если меньше - до... это самое первое, что приходит в голову..
ЗЫ. да или такой вариант, пожалуй даже проще. Прочитываем значения нужного атрибута, формируем последовательность добавления - по ней генерим новый ХМЛ из старого =) Ща попробую сделать пример.
а почему бы не юзать E4X раз уж дело всеравно в ActionScript 3.0 и не парится?
Оказалось можно сортить XMLListCollection, потому что он расширяет ListCollectionView.
// how1Filter - это XMLList, переменные определы как [Bindable]
how1FilterList = new XMLListCollection( how1Filter );
var sort:Sort = new Sort();
sort.fields = [new SortField("date", true, true)];
how1FilterList.sort = sort;
how1FilterList.refresh();
Спасибо за помощь :yahoo:
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.