Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WDDXDecoder, WDDX to AS Object 
:(
    Опции темы
AntonioBanderaz
Дата 2.11.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 18



Класс для преобразования WDDX пакета в объект ActionScript
Код

package com.avelichko.net.xml
{
    import com.avelichko.lang.util.ArrayList;
    import com.avelichko.lang.util.Map;
    import com.avelichko.lang.util.HashMap;
        
    public class WDDXDecoder
    {
        private var retObject:Map = null;
        
        public function WDDXDecoder(xml:XML) {       
            var dataList:XMLList = xml.child("data");
            var varsList:XMLList = dataList.child("struct");
            for each(var node:XML in varsList) {
                retObject = HashMap(unserializeNode(node));
            }
        }

        private function unserializeNode(node:XML):Object {
            var nodeType:String = node.name().toString().toLowerCase();
            var childs:XMLList = node.children();
            var child:XML = null;
            switch (nodeType) {
                case "number" :
                    return Number(node.child(0).toString());
                    break;
                case "boolean" :
                    return node.child(0).toString().toLowerCase() == "true";           
                    break;
                case "string" :
                    return node.child(0).toString();
                    break;
                case "array" :
                    var al:Collection = new ArrayList();
                    for each(child in childs) {
                     al.add(unserializeNode(child));
                    }
                    return al;
                    break;
                case "struct" :
                    var map:Map = new HashMap(); 
                    for each(child in childs) {
                        if (child.name().toString().toLowerCase() == "var") {
                         if(child.attribute("name").length() > 0) {
                             map.put(child.attribute("name")[0].toString().toLowerCase(), unserializeNode(child.child(0)[0])); 
                         }
                        }
                    }
                    return map;
                    break;
                default :
                    return null;
            }
            return null;
        }
        
        public function getASObject():Map {
         return retObject;
        }
    }
}


Пример использхования
Код

                        var testXML:XML = 
            <wddxpacket>
                <data>
                    <struct>
                        <var name="aaa"><boolean value="true" /></var>
                        <var name="sss"><string>dfg</string></var>
                        <var name="vvv"><number>123</number></var>
                        <var name="kkkf">
                            <array length="6">
                               <number>12</number>
                               <string>ewrwe</string>
                               <number>234</number>
                               <number>456</number>
                               <number>5676</number>
                               <number>78</number>
                            </array>
                        </var>
                     </struct>
                </data>
            </wddxpacket>;
            
            var wddxDec:WDDXDecoder = new WDDXDecoder(testXML);
            var ret:Map = wddxDec.getASObject();
            var it:Iterator = ret.keyList().iterator();
            while(it.hasNext()) {
                var o:Object = it.next();
                trace("Ключ " + o.toString());
                trace("\tЗначение " + ret.getEntry(o).toString());
                trace("\tТип " + typeof(ret.getEntry(o)));
                if(ret.getEntry(o) instanceof ArrayList) {
                    trace("\tМассив");
                    var li:Iterator = ArrayList(ret.getEntry(o)).iterator();
                    while(li.hasNext()) {
                        var oa:Object = li.next();
                        trace("\t\tЗначение " + oa.toString());
                        trace("\t\tТип " + typeof(oa));
                    }
                }
            }


На выходк получаем
Код

Ключ aaa
    Значение false
    Тип boolean
Ключ sss
    Значение dfg
    Тип string
Ключ vvv
    Значение 123
    Тип number
Ключ kkkf
    Значение [object ArrayList]
    Тип object
    Массив
        Значение 12
         Тип number
        Значение ewrwe
         Тип string
        Значение 234
         Тип number
        Значение 456
         Тип number
        Значение 5676
         Тип number
        Значение 78
         Тип number



--------------------
ГЫ... 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




[ Время генерации скрипта: 0.0405 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.