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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.09.2007, 19:25
Ventur вне форума Посмотреть профиль Отправить личное сообщение для Ventur Найти все сообщения от Ventur
  № 1  
Ответить с цитированием
Ventur
 
Аватар для Ventur

Регистрация: Jun 2006
Сообщений: 104
Отправить сообщение для Ventur с помощью ICQ
По умолчанию Загрузка XML-данных частями

Здравствуйте. Столкнулся с проблемой загрузки больших XML-файлов (порядка 1мб и выше). Загрузка с локальной директории.
Как и следовало ожидать, флеш по истечении 15 секунд выдает модальное окно с запросом на разрешение продолжения выполнения скрипта. Решил разбить xml-файл на несколько (скажем, по 20 строк каждый). Гружу данные через loadVars, каждую новую партию присоединяю к строке (как вариант - concat), по завершении загрузки паршу в xml. В итоге, доступа к определенному узлу, атрибуту... отсутствует, ввиду, как я понял, неверной конечной структуры XML.
Ранее, при загрузке через loadVars xml-данных использовал метод sendAndLoad и ресивером делал XML переменную, но, та м не было разбиения на строки.

Вот примерный код, который использую сейчас.
Код:
var xml:String = " ";
var current:Number = 0;
function loadData(path:String) {
	var my_lv:LoadVars = new LoadVars();
	clearInterval(interval);
	my_lv.onLoad = function(success:Boolean) {
		trace(current+"-------------------");
		if (success) {
			current++;
			xml+=this.toString();
			if (current<=2) {
				interval = setInterval(loadData, 2000, "multixml/"+current+".xml");
			} else {
				var level_xml:XML = new XML();
                level_xml.ignoreWhite = true;
				level_xml.parseXML(xml);
				trace(level_xml);
			}
		} else {
			trace("Error loading/parsing LoadVars.");
		}
	};
	my_lv.load(path);
}
var interval:Number = setInterval(loadData, 2000, "multixml/0.xml");
Буду рад выслушать ваши замечания и предложения по поводу нормального преобразования строки в xml.
Спасибо
__________________
freelancer


Последний раз редактировалось Ventur; 11.09.2007 в 20:57.
Старый 10.09.2007, 23:28
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 2  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
А почему сразу xml не загрузить?

Старый 10.09.2007, 23:28
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 3  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
А что толку грузить частями? Все равно время общее одно и тоже будет. Провел эксперимент ради интереса: загрузил файл 13 мб, все замечательно загрузилось.

to Kikasso: по всей видимости у Ventur'а он грузится слишком долго.


Последний раз редактировалось udaaff; 10.09.2007 в 23:31.
Старый 11.09.2007, 02:40
Ventur вне форума Посмотреть профиль Отправить личное сообщение для Ventur Найти все сообщения от Ventur
  № 4  
Ответить с цитированием
Ventur
 
Аватар для Ventur

Регистрация: Jun 2006
Сообщений: 104
Отправить сообщение для Ventur с помощью ICQ
Нет, когда одна сессия больше 15 сек - выскакивает Abort....
Потому и гружу частями. В итоге прерывание, смотри интервал в коде
__________________
freelancer

Старый 11.09.2007, 03:10
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 5  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Не разу не сталкивался, но я таких файлов и не грузил. Можно попробовать что-то такое:
Код:
var mainXML = new XML('<xml/>');
var part = 1;
var path = 'file.php'; //ну или кто там
var tempXML = new XML();
tempXML.ignoreWhite = true;
tempXML.onLoad = function(){
mainXML.firstChild.appendChild(this.firstChild);
}
tempXML.load( path + '?part='+part );
Вообще это странно, может у вас что в коде зацикливает?
upd^ код поправил


Последний раз редактировалось Kikasso; 11.09.2007 в 23:19.
Старый 11.09.2007, 09:47
Ventur вне форума Посмотреть профиль Отправить личное сообщение для Ventur Найти все сообщения от Ventur
  № 6  
Ответить с цитированием
Ventur
 
Аватар для Ventur

Регистрация: Jun 2006
Сообщений: 104
Отправить сообщение для Ventur с помощью ICQ
Нет, не зацикливает, xml большого размера, потому время загрузки/обработки составляет больше 15 секунд. Даже если просто пустой скрипт загрузки.
Видимо, строки в длину слишком большие. Для теста я могу вам выслать свой xml и вы увидите.
XML имеет структуру, схожую с SVG (векторный формат данных).
Проблема в загрузке файлов больше 1мб, а не а парсинге и прочей обработке.
__________________
freelancer


Последний раз редактировалось Ventur; 11.09.2007 в 10:26.
Старый 11.09.2007, 12:00
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 7  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Я все еще не понимаю.
Код:
var myX:XML = new XML();
var intervalID:Number;
myX.onData = function(src){
	txt.text ='ok';
	clearInterval(intervalID);
}
function checkProgress(xmlObj:XML):Void {
    var bytesLoaded:Number = xmlObj.getBytesLoaded();
    var bytesTotal:Number = xmlObj.getBytesTotal() || 10000000;
    var percentLoaded:Number = Math.floor(((bytesLoaded || .01) / bytesTotal ) * 100);
		txt.text = "percent loaded: " + percentLoaded;
}
myX.load('Landing.mp3');
intervalID = setInterval(checkProgress, 100, myX);
mp3 - 3 метра с небольшим, гружу с модемной скоростью через webSpeedSimulator, грузится около 5 минут, в конце говорит "ок".
Откуда эта история с 15 секундами?

гружу mp3, потому что искать большой текстовик лень. Парсить я его не собираюсь )) А на этапе загрузки флешу не важно что грузить.


Последний раз редактировалось Kikasso; 11.09.2007 в 12:04.
Старый 11.09.2007, 20:39
Ventur вне форума Посмотреть профиль Отправить личное сообщение для Ventur Найти все сообщения от Ventur
  № 8  
Ответить с цитированием
Ventur
 
Аватар для Ventur

Регистрация: Jun 2006
Сообщений: 104
Отправить сообщение для Ventur с помощью ICQ
, вы еще клип грузите, ан е mp3.
С xml все иначе.
В общем, решение проблемы - unescape();
Спасибо за участие

Верный код типа этого:

Код:
var xml:String = "";
var current:Number = 0;
function loadData(path:String) {
	var my_lv:LoadVars = new LoadVars();
	clearInterval(interval);
	my_lv.onLoad = function(success:Boolean) {
		if (success) {
			current++;
			xml+=this.toString();
			if (current<=2) {
				interval = setInterval(loadData, 2000, "multixml/"+current+".xml");
			} else {
				var level_xml:XML = new XML();
                level_xml.ignoreWhite = true;
				level_xml.parseXML(unescape(xml));
				trace(level_xml);
			}
		} else {
			trace("Error loading/parsing LoadVars.");
		}
	};
	my_lv.load(path);
}
var interval:Number = setInterval(loadData, 2000, "multixml/0.xml");
__________________
freelancer


Последний раз редактировалось Ventur; 11.09.2007 в 20:58.
Старый 11.09.2007, 22:13
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 9  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Что грузить, без разницы. Вот нашел какой-то текстовик на 4 мега, обозвал его "test.xml" и гружу этим же кодом, только onData поменял. Время загрузки 323 секунды.
Код:
myX.onData = function(src){
  txt.text = src;
  clearInterval(intervalID);
}
myX.load('test.xml');
Все нормально грузится.
Откуда вы взяли 15 секунд?

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

Регистрация: Apr 2007
Сообщений: 1,369
Опять эти 15 секунд, я про них уже где-то слышал!

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

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

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


 


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


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