Форум 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)
-   -   Разбор XML (http://www.flasher.ru/forum/showthread.php?t=156825)

shmblra 27.05.2011 11:48

Разбор XML
 
Уважаемые форумчане, помогите разобраться.

Все ни как не могу разобраться как работать с xml

Задача в следущем:
1. создание xml
2. загрузить его во флеш
3. создать и добавить данные из xml в массив объектов.

мои действия:

1. XML структура:
Код:

<?xml version="1.0" encoding="utf-8"?>
<games>
        <level id="1" small="images/small_1.jpg" big="images/big_1.jpg">
                <tags id="1" obj="некий объект" text="некий текст"></tags>
                <tags id="2" obj="некий объект" text="некий текст"></tags>
        </level>
        <level id="2" small="images/small_2.jpg" big="images/big_2.jpg">
                <tags id="1" obj="некий объект" text="некий текст"></tags>
                <tags id="2" obj="некий объект" text="некий текст"></tags>
        </level>
        <level id="3" small="images/small_3.jpg" big="images/big_3.jpg">
                <tags id="1" obj="некий объект" text="некий текст"></tags>
                <tags id="2" obj="некий объект" text="некий текст"></tags>
        </level>
</games>

2. загружаю его во флеш:
Код AS1/AS2:

class action.rad.all.Game  extends MovieClip {
 
        private var gameArray:Array;
 
        public function Game() {
 
                gameArray = new Array();
 
                var xmlData:XML = new XML();
                xmlData.ignoreWhite = true;
                xmlData.onLoad = loadXML;
                xmlData.load('xml/myxml.xml');
 
                function loadXML (success:Boolean)
                {       
                        if (success){
                                var node:XMLNode = this.firstChild ;
                                var total:Number = node.childNodes.length ;       
                                for(var i:Number = 0; i < total; i++){
                                        var fName:String = node.childNodes[i].attributes['small'];                       
                                        trace(fName);
 
                                        gameArray[i] = fName; - выводлит undefine - не могу понять почему
                                        //gameArray.push(fName) - выводит так же undefine
                                }
                        }else {
                                trace ('Ошибка при загрузке xml');
                        }
 
                        trace ('gameArray: ' + gameArray);
                }
        }
}

Проблема в том, что я не знаю как добавить элементы в массив и по мимо всего прочего у каждого тега level есть дочерние элементы, как создать массив объектов примерно такого типа из этой структуры

Код:

someObject[0]
{
obj.id = level_id
obj.small = level_small
obj.big = level_big
obj.tags = level.tags.id = i (их же может быть неограниченное колличество)
}
someObject[1]
{
obj.id = level_id
obj.small = level_small
obj.big = level_big
obj.tags = level.tags.id = i (их же может быть неограниченное колличество)
}
и так далее

я запутался уже с xml ...

dark256 27.05.2011 15:01

attributes.small

Дочерние - вставьте еще один цикл и:

node.childNodes[i].childNodes[j].attributes

shmblra 27.05.2011 16:12

а в массив не добавляет ...

немного переделал структуру, при помощи callBack функции

а вот как теперь построить массив объектом ?
Код AS1/AS2:

class action.rad.all.Game  extends MovieClip {
 
 
        private var xmlData:XML;
        private var gameObject:Object;
 
        //Конструктор Класса
        public function Game() {
 
                xmlData =  new XML();
                xmlData.ignoreWhite = true;
                xmlData.onLoad = callBack (this, loadXML);
                xmlData.load('xml/myxml.xml');
 
        }
        //Функция разбора XML, создает Массив Объектов.
        private function loadXML (success:Boolean) {       
 
                if (success) {
                        var node:XMLNode = xmlData.firstChild ;
                        var total:Number = node.childNodes.length ;       
 
                        for (var i:Number = 0; i < total; i++) {
 
                                var pp:XMLNode = node.childNodes[i];
                                if (pp.nodeName == 'level') {
 
                                        trace ('small: ' + pp.attributes.small);
                                        trace ('big: ' + pp.attributes.big);
 
                                        for (var j:Number = 0; j < pp.childNodes.length; j++) {
 
                                                var zz:XMLNode = pp.childNodes[j];
                                                if (zz.nodeName == 'tags') {
 
                                                        trace ('obj: ' + zz.attributes.obj);
                                                        trace ('text: ' + zz.attributes.text);
                                                }
                                        }
                                }
                                trace ('----------------');
                        }
                }else {
                        trace ('Ошибка при загрузке xml');
                }
        }
        //Возвращает функцию. Влияет на область видимости
        private function callBack (scope, func, par):Function {
                return function () {
                        if (par != undefined ) {
                                func.call(scope, arguments, par);
                        } else {
                                func.call(scope, arguments);
                        }
                }
        }
}



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

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