Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как грамотно заполнить хмл объекты (http://www.flasher.ru/forum/showthread.php?t=129022)

Xero201 22.08.2009 21:08

Как грамотно заполнить хмл объекты
 
Нужно последовательно заполнить несколько 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();
}

Ну или еще как-нибудь :rolleyes:

FlashRabbit 22.08.2009 22:51

Можно делать как вы, это нормально. Но мне обычно лень и я использую BulkLoader.

Xero201 23.08.2009 00:29

Цитата:

Сообщение от FlashRabbit (Сообщение 844871)
Но мне обычно лень и я использую 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);//ничего не выводит.

Подскажи, пожалуйста, в чем дело?

FlashRabbit 23.08.2009 01:14

Код 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");
}


Xero201 23.08.2009 02:08

Большое спасибо, 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, время: 07:26.

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