Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   [AS3]Как конвертировать XML в массив (http://www.flasher.ru/forum/showthread.php?t=83745)

Exey 14.08.2006 18:01

[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'}
]


etc 14.08.2006 18:27

А чем тебя не устраивает сам XML? Зачем менять структуру?

Nirth 14.08.2006 18:37

причем тут FLEX?
перенес в раздел для новичков, раз пользователь не знает как слово "парсинг"

Exey 14.08.2006 18:53

Цитата:

Сообщение от __etc
А чем тебя не устраивает сам 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") :(

Exey 15.08.2006 14:03

Цитата:

Сообщение от Nirth
причем тут 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>


wvxvw 15.08.2006 14:56

А нельзя никак передавать значения в атрибутах? Зачем плодить лишние узлы, да еще и текстовые?

Nirth 15.08.2006 15:28

можно открыть поиск и ввести слова "парсинг XML" и не парится и ждать ответа=)

Exey 15.08.2006 17:00

Цитата:

Сообщение от Nirth
можно открыть поиск и ввести слова "парсинг XML" и не парится и ждать ответа=)

нашел топик Оптимизация разбора ХМЛ

там:

Цитата:

Сообщение от Iv
...
в 99 процентах случаев нужно работать с XML.
...
Абсурдно удалять то, что помогает работать с данными.

В моем случае то же? (динамически собираю XMLList, не могу остортировать :rtfm:)
Если да, то подскажи как отсортировать узлы <item>...</item> по дате которая в <item><date>...</date></item> .

Exey 15.08.2006 17:15

Цитата:

Сообщение от wvxvw
А нельзя никак передавать значения в атрибутах?

Рад бы... незнаю как?

Цитата:

Сообщение от wvxvw
Зачем плодить лишние узлы, да еще и текстовые?

Мне нужно наполнить осортированными узлами:
Код:

<mx:DataGrid>
  <mx:columns>
    <mx:DataGridColumn dataField="title" headerText="title"/>                   
    <mx:DataGridColumn dataField="date" headerText="date" />
  </mx:columns>
</mx:DataGrid>

Есть ли методы у DataGrid или DataGridColumn, чтобы выводить поля в порядке убывания даты?

wvxvw 16.08.2006 03:00

Цитата:

Сообщение от Exey
Есть 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(); проверяем циклом нужный аттрибут, если значение больше - добавляем узел после, если меньше - до... это самое первое, что приходит в голову..

ЗЫ. да или такой вариант, пожалуй даже проще. Прочитываем значения нужного атрибута, формируем последовательность добавления - по ней генерим новый ХМЛ из старого =) Ща попробую сделать пример.


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

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