Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.08.2009, 21:08
  № 1  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
По умолчанию Как грамотно заполнить хмл объекты

Нужно последовательно заполнить несколько XML объектов, если заранее известны пути к каждому из них. Пока использую для этого такой алгоритм:
Код AS3:
CI=0; //переменная которая хранит номер текущего хмл
buildXML(aXMLpath[CI]);// где aXMLpath = [“path1","path2",..,”pathN”];- массив с адресами каждого из хмл.
 
function buildXML(path:String):void{ 
   var loader:URLLoader = new URLLoader();
   loader.dataFormat = URLLoaderDataFormat.TEXT;
   loader.addEventListener (Event.COMPLETE, xmlLoader);
   loader.load(new URLRequest(path));
}
 
function xmlLoader(event:Event):void{
   var xmlObj = [aXMLname[CI]];// где aXMLname = [xml1,xml2,..,xml3]; - массив с сылками на каждый хмл-объект
   xmlObj = new XML(event.target.data);
   switch(CI){//дальнейшая работа с заполненным хмл-обектом
       case 0: //code1
       case 1: //code2
       //и т.д.
   }
 
   if(++CI<aXMLpath.length) buildXML(aXMLpath[CI]);//если еще заполнены не все хмл
}
Т.е. сначала вызывается загрузка хмл для 1-ого объекта. Потом с помощью переменной CI выбирается соответствующий хмл-объект из массива aXMLname. Потом выполняется необходимые действия (для каждого свои). Потом значение CI сравнивается с количеством хмл-обектов, и если оно меньше операция повторяется.

Подскажите пожалуйста, как решить эту задачу более грамотно. Например, чтобы алгоритм имел вид
Код AS3:
for(var i:int=0;i< aXMLpath.length;i++){
   buildXML(i);
}
function buildXML(num:int){
   var xmlObj = [aXMLname[num]];
   xmlObj = new XML(get_xml(aXMLpath[num]));
   switch(num){
      case 0: //code1
      case 1: //code2
      //и т.д.
   } 
}
function get_xml(path:String):String
{
   //Загрузить хмл в xmlData
   return xmlData.toString();
}
Ну или еще как-нибудь

Старый 22.08.2009, 22:51
FlashRabbit вне форума Посмотреть профиль Отправить личное сообщение для FlashRabbit Найти все сообщения от FlashRabbit
  № 2  
Ответить с цитированием
FlashRabbit
 
Аватар для FlashRabbit

Регистрация: Jul 2009
Сообщений: 93
Можно делать как вы, это нормально. Но мне обычно лень и я использую BulkLoader.

Старый 23.08.2009, 00:29
  № 3  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
Цитата:
Сообщение от FlashRabbit Посмотреть сообщение
Но мне обычно лень и я использую BulkLoader.
Спасибо. Скачал BulkLoader - судя по всему удобная штука, во только что-то пока не получается воспользоваться(. Делают так:
Код AS3:
import br.com.stimuli.loading.BulkLoader;
////////////////////////////////////
var loader:BulkLoader =  new BulkLoader("main");
loader.add("data/catalog.xml");
loader.start();
//var mXML:XML = loader.getLoader("main").getXML("data/catalog.xml");//ERROR: 1061: Call to a possibly undefinde method getLoader through a reference with static type br.com.stimuli.loading:BulkLoader
var mXML:XML = loader.getXML("data/catalog.xml");
trace(mXML);//ничего не выводит.
Подскажи, пожалуйста, в чем дело?

Старый 23.08.2009, 01:14
FlashRabbit вне форума Посмотреть профиль Отправить личное сообщение для FlashRabbit Найти все сообщения от FlashRabbit
  № 4  
Ответить с цитированием
FlashRabbit
 
Аватар для FlashRabbit

Регистрация: Jul 2009
Сообщений: 93
Код AS3:
var xmlPaths:Array = ["1.xml", "2.xml", "3.xml"];
var loader:BulkLoader = new BulkLoader("myXmlLoaderName");
 
for(var i:int = 0; i < xmlPaths.length; i++)
{
	loader.add(xmlPaths[i], {id:("xml_"+i)});
}
 
loader.addEventListener(BulkProgressEvent.COMPLETE, completeHandler);
loader.start();
 
function completeHandler(e:BulkProgressEvent):void
{
	var myXML:XML = loader.getXML("xml_0");
}

Старый 23.08.2009, 02:08
  № 5  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
Большое спасибо, FlashRabbit.
Кстати, стал проводить соревнования между булкером и своим методом и обнаружил интересную статистику:
Когда загружается только один файл они работают почти одинаково не зависимо от размера файла разница 1 милисекунда (например Bulk > 70 vs My > 71)
При загрузке двух файлов мой метод резко тормозит (Bulk > 80 vs My > 231) проверял раз десять, цифры немного колеблются, но соотношение остается.
При трех файлах булк тоже начинает работать медленнее (Bulk > 218 vs My > 317)
При четырех (Bulk > 232 vs My > 403).
Как это булкеру удалось меня обставить не понятно)))
Но есть еще один нюанс, первый файл весит много (18 Кб) а грузится быстро. Остальные три файла весят коло 500 байт, но почему то начинаются резкие разбежки во временем (в моем методе между загрузкой одного и двух файлов, а у булкера между двумя и тремя)???

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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