Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Flash > удобная работа с XML


Автор: PROCESSOR 15.7.2005, 07:42
Пример как можно очень удобно работать с XML данными без всякого лазанья по узлам. Причем еще не верх совершенства, а просто быстрый набросок:

пример XML базы ( таблица ).

<book q='1' w='2' e='3' n='name1' />
<book q='1' w='2' e='3' n='name1' />
<book q='1' w='2' e='3' n='name1' />
<book q='1' w='2' e='3' n='name1' />


Код

// LOAD XML 
// имитация загрузки
data="<book q='1' w='2' e='3' n='name1'/><book q='1' w='2' e='3' n='name2'/><book q='1' w='2' e='3' n='name3'/><book q='1' w='2' e='3' n='name4'/>"
var xm=new XML()
xm.parseXML (data)

// перевод в удобную обьектную модель
book=new Array()
for (z=0 ; z <xm.childNodes.length ; z++) {
    ob=new Object()
    ob.q=xm.childNodes[z].attributes.q
    ob.w=xm.childNodes[z].attributes.w
    ob.e=xm.childNodes[z].attributes.e
    ob.name=xm.childNodes[z].attributes.n
    book[z]=ob
}
// вывод и любая работа с обьектами
trace (book[1].name) 

// перевод в XML обратно, после изминений ( если их нет, то и переводит ненадо )
var tx
for (z=0 ;z<book.length ; z++) {
    tx+="<book q='"+book[z].q+"' w='"+book[z].w+"' e='"+book[z].e+"' n='"+book[z].name+"' />"
}
xm=parseXML (tx)

// SAVE XML


- Теперь к любой книге можно обратиться просто как в массиве. book[номер].
- Обращение к аттрибутам естественное: book[номер].имяаттрибута
- С массивом можно вытворять всё что угодно. См. Array функции. И потом он обратно преобразуется в XML.
- Можно добавлять бесконечное количество новых аттрибутов , но для этого надо будет слегка изменить код. Аттрибуты в цикле обрабатывать. Пример: book[5].color='red'.
- Код практически универсален для AS, PHP, JS .
- Вообщем базу можно устроить как угодно и код под неё подогнать, но общие принципы, помоему ясны.
- Помоему это легко , примитивно, но очень полезно .


smile

Автор: AlDev 15.7.2005, 07:44
идея стара как мир smile
http://batsuev.com/wp/?page_id=38
Добавлено @ 07:49
Цитата(PROCESSOR @ 15.7.2005, 12:42)
trace (book[1].name)

косяк. А вдруг мне захочется прицепить к book[1] переменную name?

Цитата(PROCESSOR @ 15.7.2005, 12:42)
for (z=0 ; z <xm.childNodes.length ; z++) {
    ob=new Object()
    ob.q=xm.childNodes[z].attributes.q
    ob.w=xm.childNodes[z].attributes.w
    ob.e=xm.childNodes[z].attributes.e
    ob.name=xm.childNodes[z].attributes.n
    book[z]=ob
}

делать надо рекурсивно. Дабы всё дерево обойти

Цитата(PROCESSOR @ 15.7.2005, 12:42)
И потом он обратно преобразуется в XML.

ничего обратно не преобразуется smile просто book[z] и xm.childNodes[z] - это один и тот-же объект, если его записать как
book[z] = xml.childNodes[z].


Цитата(PROCESSOR @ 15.7.2005, 12:42)
- Можно добавлять бесконечное количество новых аттрибутов , но для этого надо будет слегка изменить код. Аттрибуты в цикле обрабатывать. Пример: book[5].color='red'.


зачем код трогать? а не проще всё и сразу?
Код

var j:String;
for (j in xm.childNodes[i].attributes)
{
  book[z][j] = xm.childNodes[i].attributes[j];
}

Добавлено @ 07:51
как всё это у меня работает:
Цитата


< ?xml version=’1.0′? >
<items>
  <item some_attr=’val_1′/>
  <item some_attr=’val_2′/>
</items>

как бзать класс:

пусть верхний xml лежит в doc.
тогда:

import com.batsuev.utils.XMLUtils

XMLUtils.setObjectModel(doc);
Flashout.info(doc[’items’][0][’item’][0].attributes.some_attr);
Flashout.info(doc[’items’][0][’item’][1].attributes.some_attr);

Автор: Caramel 15.7.2005, 09:48
smile

Саша ты просто монстр какой-то smile

Автор: AlDev 15.7.2005, 10:03
Цитата(Caramel @ 15.7.2005, 14:48)
smile

Саша ты просто монстр какой-то smile

почему?

Автор: PROCESSOR 15.7.2005, 15:11
Думал как оптимизировать и укоротить ...

А ведь можно просто написать: book=xml.childNodes и можно обращаться как book[z] и нендо вообще ничо никуда переводить, а для работы с с аттрибутами obj=book[z].attributes , и обращаться как obj.name

Поэтому вроде эти функции вообще ненужны ... smile

Автор: AlDev 16.7.2005, 02:31
у тебя сильно кастомное решение

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)