Форум 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=82560)

UrbanMan 15.07.2006 20:15

проблема с подгрузкой XML-ек
 
Такая проблема, флэш обращается к пшп скрипту, который возвращает ему XML-ку, в этой XML-ки ссылки на другие XML-ки и нужные данные. С помощью дополнительной оболочки я сохраняю XML-ки на хард драйве. Забираю из основной XML нужные данные, и запускаю функцию обработки других XML-ек линки до которых я предварительно сохранил в массив.

Проблема в том, что сразу же не получается обработать "другие" XML.

Ради чистоты эксперемента, я сделал две кнопки:

На одну назначил получение основной XML, запись в массив линков к остальным XML, и выдергивание остальной нужной информации.

На вторую назначил запуск функции обработки XML-ек сохраненных на харде.

Получается, что когда я жму на первую кнопку основные данные обрабатываются, XML-ки сохраняются. Всё отлично. Тут же жму на вторую, и обрабатывается только одна-две XML-ки, жму ещё обработалось уже 4-5, если подождать секунд 10 и ещё раз нажать, то отпарсится всё.
Как от этого избавится? Неизвестно сколько времени понадобится на других компьютерах, для того чтобы "подготовились" все XML-файлы.

Заранее хочу извинится за бардак в коде, после многочисленных изменений и 10-ти часов работы, аккуратность уходит на второй план.

Код:

function XML_update(Link:String) {
        _root.xArray = new Array();
        var myXMLr:XML = new XML();
        myXMLr.ignoreWhite = true;
        //
        myXMLr.onLoad = function(success) {
                mApplication.trace("OK");
                if (success) {
                        //Категории
                        count_of_categories = this.firstChild.childNodes[0].attributes.count_of_categories;
                        for (var i:Number = 0; this.firstChild.childNodes[0].childNodes[i] != undefined; i++) {
                                category_name = this.firstChild.childNodes[0].childNodes[i].attributes.name;
                                mFile.createFolder(contentFolder+category_name);
                                category_count = this.firstChild.childNodes[0].childNodes[i].attributes.count_of_products;
                                sub_category_of = this.firstChild.childNodes[0].childNodes[i].attributes.sub_category_of;
                                count_of_sub_categories = this.firstChild.childNodes[0].childNodes[i].attributes.count_of_sub_categories;
                        }
                        //Новости
                        for (var m:Number = 0; this.firstChild.childNodes[2].childNodes[m] != undefined; m++) {
                                DataNews = this.firstChild.childNodes[2].childNodes[m].attributes.date;
                                news_title = this.firstChild.childNodes[2].childNodes[m].attributes.title;
                                Link = this.firstChild.childNodes[2].childNodes[m].attributes.link;
                                News = this.firstChild.childNodes[2].childNodes[m].childNodes[0].nodeValue;
                        }
                        //Продукты
                        count_of_products = this.firstChild.childNodes[1].attributes.count_of_products;
                        for (var j:Number = 0; this.firstChild.childNodes[1].childNodes[j] != undefined; j++) {
                                id = this.firstChild.childNodes[1].childNodes[j].attributes.ID;
                                date = this.firstChild.childNodes[1].childNodes[j].attributes.date;
                                value = this.firstChild.childNodes[1].childNodes[j].attributes.value;
                                value = value.substring(0, value.length-4);
                                category = this.firstChild.childNodes[1].childNodes[j].attributes.category;
                                pad_url = this.firstChild.childNodes[1].childNodes[j].attributes.pad_url;
                                mApplication.downloadFile(xmlFolder+j+".xml", pad_url);
                                mApplication.trace("PAD URL INET = "+pad_url);
                                img_url = this.firstChild.childNodes[1].childNodes[j].attributes.img_url;
                                _root.xArray.push({value:value, category:category, pad_url:Lin, img_url:img_url, date:date});
                        }
                }
                test();
                return;
        };
        myXMLr.load(Link);
}
///////////////////////////////////////////////////
function test() {
        delete (_root.XML_update);
        for (l=1; l<68; l++) {
                li = "E:\\Documents and Settings\\urbanman\\Application Data\\EleFun Desktops\\Desktop Manager\\XML\\"+l+".xml";
                value = _root.xArray[_global.cc].value;
                var productXML:XML = new XML();
                productXML.ignoreWhite = true;
                productXML.load(li);
                trace("aaaa = "+li);
                productXML.onLoad = function(successNew) {
                        if (successNew) {
                                //Обработка XML
                                Name = this.firstChild.childNodes[4].childNodes[0].childNodes[0].nodeValue;
                                mApplication.trace("Name = "+Name);
                                trace("Name = "+Name);
                                Type = _root.xArray[_global.cc].category;
                                Link_file = this.firstChild.childNodes[6].childNodes[0].childNodes[0].childNodes[0].nodeValue;
                                Link_txt = escape(this.firstChild.childNodes[5].childNodes[0].childNodes[3].childNodes[0].nodeValue);
                                mApplication.trace("ID ="+mApplication.downloadFile(contentFolder+category+"\\"+value+".jpg", _root.xArray[_global.cc].img_url));
                                Link_jpg = contentFolder+category+"\\"+value+".jpg";
                                Link_buy = this.firstChild.childNodes[9].childNodes[2].childNodes[0].nodeValue;
                                Version = this.firstChild.childNodes[4].childNodes[1].childNodes[0].nodeValue;
                                Enter_date = _root.xArray[_global.cc].date;
                                Txt_preview = escape(this.firstChild.childNodes[5].childNodes[0].childNodes[5].childNodes[0].nodeValue);
                                Cost = this.firstChild.childNodes[4].childNodes[14].childNodes[0].nodeValue;
                                Sr = this.firstChild.childNodes[4].childNodes[5].childNodes[0].nodeValue;
                                Top = "true";
                                Program_type = this.firstChild.childNodes[4].childNodes[6].childNodes[0].nodeValue;
                                Full_size = this.firstChild.childNodes[4].childNodes[16].childNodes[2].childNodes[0].nodeValue;
                                Action = this.firstChild.childNodes[4].childNodes[7].childNodes[0].nodeValue;
                        } else {
                                trace("ERROR");
                        }
                };
        }
}


etc 15.07.2006 22:29

Ужасный код. Переписать заново! И проблем не возникнет.

sem1313 16.07.2006 00:31

Странно(сумбурно), зачем загружать XML, затем копировать его в массив, после удалять, создавать новый, в него пихать элементы массива, и уже потом только их использовать... (Переминаем смятую-перемятую бумагу...). В приведенном коде действительно трудно разобраться(поверхностным взглядом)... Сделай проще...

З.Ы. Почему бы всё в один XML не запихнуть(?)...

UrbanMan 16.07.2006 11:12

Цитата:

Сообщение от sem1313
Странно(сумбурно), зачем загружать XML, затем копировать его в массив, после удалять, создавать новый, в него пихать элементы массива, и уже потом только их использовать... (Переминаем смятую-перемятую бумагу...). В приведенном коде действительно трудно разобраться(поверхностным взглядом)... Сделай проще...

З.Ы. Почему бы всё в один XML не запихнуть(?)...

всё в один XML сделать не получится, потому что этими XML-ками уже давно и успешно пользуются сайты и много чего ещё.

Массив создаётся потому что, в основной XML-ке помимо линков есть ещё и дополнительная инфа к каждой XML-ке находящихся по этому самому пути.

Т.е. грубо говоря первая XML мне даёт:
Линки, и некоторую инфу о файле который находится по этому Линку. Которые я пишу в массив. Далее я циклом рабираю остальные XML.

По сути, даже не важно что за код я выложил, это был черновик, который прекрасно работает если парсировать по линкам с инета, но это отнимает больше времени. Если сразу всё скачать, то парсируется всё практически мгновенно, но вот с такой непонятной задержкой в 7-10 секунд, между обработкой основной XML, и вторичных.


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

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