Форум 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)
-   -   Загрузить информацию из 3 XML в один контент (http://www.flasher.ru/forum/showthread.php?t=120553)

KiL33 23.01.2009 20:34

Загрузить информацию из 3 XML в один контент
 
Есть 3 xml необходимо по очереди загрузить с трёх xml инфу.
Когда делаю циклом, информация загружается только с последнего xml.
Код AS1/AS2:

for (var n:Number = 0; n < 3; n++)
{
urlList = "myXML" + n + ".xml";
xml.load(urlList);
}

Видимо нужно делать проверку, если загружена первая xml, брать из нее инфу, потом грузить следующую и т.д.
Только вот пока что это не выходит.

Цветкофф 23.01.2009 21:19

KiL33,а_сутьба_объединить_в_одиН?

Fatality 23.01.2009 21:36

я бы сделал так:
Код AS1/AS2:

XML.prototype.ignoreWhite = true;
var XML_toLoad:XML = new XML();
var XML_Array:Array = ["images.xml", "text.xml", "info.xml"];
var loaded_XML:Array = [];
var counter:Number = 0;
XML_toLoad.onLoad = function()
{
        loaded_XML.push(new XML(this));
        if (counter < XML_Array.length - 1)
        {
                counter++;
                this.load(XML_Array[counter]);
        }
        else trace(loaded_XML);
};
XML_toLoad.load(XML_Array[counter]);

по срабатыванию условия else массив loaded_XML содержит загруженные XML из списка XML_Array

Kuruki 23.01.2009 21:37

Ну либо загружать по очереди (вызывать загрузку следующего после загрузки текущего), либо 3 объекта хмл создавать

KiL33 24.01.2009 09:43

Вложений: 1
Fatality, Спасибо за пример он хорош, но есть пара недостатков. Возможно они возникли потому что вопрос мой был не полностью раскрыт.
XMl-ок может быть свободное количество, ну к примеру за максимум возьмём три. И само собой создавать массив с перечислением имен файлов не есть в моем случае хорошо. Разумеется проще цикл. Сами представьте если xml-ок будет больше двух десятков.
Информация в xml представляет собой атрибуты, с помощью которых строится структура
Очередной раз соглашусь с kuruki в данном случае с поочередной загрузкой.

Код AS1/AS2:

import mx.utils.Delegate;
 
var urlList:Array;
var textLoader:XML;
 
// Составляем список имён файлов.
urlList = new Array();
 
for (var n:Number = 0; n < 3; n++)
{
urlList[n] = "myXML" + n + ".xml";
 
}
 
textLoader = new XML();
textLoader.onData = Delegate.create(this, onText);
 
// Обработчик события XML.onData
function onText(value:String):Void
{
//txt1.text += value;
 
// Загружаем xml-ки
xml.load(urlList[0]);
xml.ignoreWhite = true;
trace("ЗАГРУЖЕНО __"+urlList[0])
 
// Если файлы не кончились, грузим следующий.
if (urlList.length > 0)
{
var fileName:String;
 
fileName = urlList[0];
urlList.shift();
 
textLoader.load(fileName);
}
}
onText();

XML-ки считываются, но структура не создается.
Атрибуты считываются только с первого, хотя трейс показывает, что все xml по очереди были загружены
В примере полноценный код. Есть пара откровенных косяков, может кто-нибудь поможет исправить.

Wolsh 24.01.2009 14:23

Код AS1/AS2:

var xml:XML = new XML();
xml.onLoad = xmlLoaded;
var xmlDocs:Array = new Array();
var xmlCounter:Number = 0;
function xmlLoaded(ok:Boolean) {
    if (ok) {
        trace("загружена XML : "+xmlCounter);
        xmlDocs.push(this.firstChild);
        xmlCounter += 1;
        loadXML(xmlCounter);
    } else {
        trace('...а больше нету...');
        done();
    }
}
function loadXML(count:Number) {
    xml.load("myXML"+count+".xml");
}
//// cтартуем загрузку
loadXML(0);
 
//// все xml'ки загружены
function done() {
 
    var startY:Number = 0;
    for (var doc:Number = 0; doc<xmlDocs.length; doc++) {
        var node:XMLNode = xmlDocs[doc].firstChild;
        var i:Number = 0;
        while (node) {
 
        if (node.nodeName == 'node') {trace(node)
                var message = this.attachMovie('mc', 'mc'+doc+'_'+i, this.getNextHighestDepth());
                message.txt.autoSize = true;
                message.txt_var = node.attributes['label'];
                message._y = startY;
                startY+=30;
                i++;
            }
            node = node.nextSibling;
        }
    }
}


KiL33 24.01.2009 18:14

Спасибо, это реализовано значительно лучше, чем даже как я хотел сделать:)
Только вот, сколько ни долблюсь одного не понимаю, почему делая мувик кнопкой я не могу получить инфу с атрибутов.
Код:

  if (node.nodeName == 'node') {trace(node)
                var message = this.attachMovie('mc', 'mc'+doc+'_'+i,   
                this.getNextHighestDepth());
                message.txt.autoSize = true;
                message.txt_var = node.attributes['label'];
                message._y = startY;
              message.onPress=function(){
          _root.txt= node.attributes['label'];
        }
       
              startY+=30;
              i++;
            }
            node = node.nextSibling;
        }
    }
}


Wolsh 24.01.2009 20:33

Потому что node нет ни в кнопке, ни в руте. Эта переменная существует только в обработчике загрузки и только пока выполняется функция. Проще говоря, недоступна.
Так что нужен механизм для связывания кнопок и нодов - либо запоминать всю инфу прямо в свойствах кнопки message (собственно, лейбл у вас и сохраняется в переменной message.txt_var - кстати, что за допотопный способ? почему не message.txt.text?) - либо все ноды хранить в массиве, в кнопках сохранять индексы по которым искать ноды - это на случай, если инфы в одном ноде много и сохранять всю в переменных кнопки не оптимально.
И вот...
Код:

_root.txt.text = this.txt_var;

KiL33 24.01.2009 21:03

Цитата:

Сообщение от Wolsh (Сообщение 793351)
message.txt_var - кстати, что за допотопный способ? почему не message.txt.text?

Честно говоря, я не замечал разницы. А она вообще есть?

KiL33 29.01.2009 16:20

Ещё одна проблема.
По мере необходимости мне нужно удалять xml’ки и удаляю я их не по порядку, а в разброс, т.е. допустим xml’ок 10 я удаляю пятую и вот здесь возникает проблема, если обрывается порядковая цепочка цифр то xml’ки считаются только до 4 хотя после 4 идут еще 6 7 8 9 10 xml’ок.

Можно с этим что-то сделать?


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

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