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

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

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

Регистрация: Oct 2007
Сообщений: 60
По умолчанию Перебор всех элементов в XML

Когда то видел пример, простой цикл перебирал все элементы XML. Но найти уже не могу. Мне нужно получить значения attributes из узла XML - nodeName которого известно заранее.
Так понимаю что это будет не единственный поиск и видимо нужно перебрать все в цикле паралельно выдергивая и обрабатывая найденные узлы имеющие верные nodeName.

На этом форуме тоже поискал. Нашел одну тему но не совсем подходящую. Да и нет на форуме такой темы как я сделал сейчас - может потом кому то проще будет найти...

Старый 11.04.2008, 16:51
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 2  
Ответить с цитированием
qazwsx
Banned

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
Код:
for(node = XMLNode; node!=undefined; node.nextSibling){
if(node.nodeName == "blablabla"){
}
}


Последний раз редактировалось iNils; 11.04.2008 в 17:00.
Старый 11.04.2008, 16:56
Shinoby вне форума Посмотреть профиль Отправить личное сообщение для Shinoby Найти все сообщения от Shinoby
  № 3  
Ответить с цитированием
Shinoby
 
Аватар для Shinoby

Регистрация: Oct 2007
Сообщений: 60
У меня цикл уходит в небытие и среда разработки предлагает его кильнуть постоянно. Хотя имя 100% присутствует. Пытаюсь трейсом увидеть что к чему - даже ничего не выдаёт... Просто вылетает.


Последний раз редактировалось Shinoby; 11.04.2008 в 17:27.
Старый 11.04.2008, 17:27
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 4  
Ответить с цитированием
qazwsx
Banned

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
600 строк это не так много. А под XMLNode я имелл виду просто XML разницы нет >_>

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

Регистрация: Oct 2007
Сообщений: 60
Я вот чего не пойму. Вот куски кода:

Код:
book_xml3 = new XML ();
book_xml3.ignoreWhite = true;
book_xml3.onLoad = function (sucess) {
	if (sucess) {
		ParseInf (book_xml3);
	}
};

book_xml3.load ("02.xml");
далее в функции ParseInf я подставляю переданное значение в цикл и... Он уходит в транс.

Код:
	for(my_node = book_xml3; my_node!=undefined; my_node.nextSibling){
		if(my_node.nodeName == "characterInfo"){
			break;
		}
	}
Причём book_xml3 хранит структуру ХМЛ 100%, я в этом уверен, так как чуть выше по коду проверяю это тупо "book_xml3.childNodes[0].childNodes[0].childNodes[0].attributes.name", а далее структура ХМЛ может меняться и вот тут мне нужен цикл для поиска.


Последний раз редактировалось Shinoby; 11.04.2008 в 17:45.
Старый 11.04.2008, 18:21
Fernando Costa вне форума Посмотреть профиль Отправить личное сообщение для Fernando Costa Найти все сообщения от Fernando Costa
  № 6  
Ответить с цитированием
Fernando Costa
 
Аватар для Fernando Costa

Регистрация: Oct 2006
Адрес: simferopol -> kyiv
Сообщений: 2,161
Отправить сообщение для Fernando Costa с помощью ICQ
ключевое слово - рекурсия
__________________
: M F N W :

Старый 11.04.2008, 19:19
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 7  
Ответить с цитированием
qazwsx
Banned

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
my_node = my_node.nextSibling
Что значит хмл может менятся?

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

Регистрация: Oct 2007
Сообщений: 60
Цитата:
Сообщение от qazwsx
my_node = my_node.nextSibling
Что значит хмл может менятся?
Ну хмл генерю не я и ничто не мешает ему в следующий раз иметь иную структуру. но он всегда будет соответствовать хмл "принципу" и парситься должен без проблем.


Цитата:
Сообщение от chingachgoog
плюс еще поправочка
более правильно (чисто формально) my_node!=null

а вот рекурсию в xml не советовал бы - слишком велика вероятность наткнуться на флешовое ограничение по ней.
Несмотря на то, что хмл не я генерю, но тот объем данных что будет в нем не должен заставить в случае рекурсии нарваться на какие либо ограничения. Сказав на вскидку, я предполагаю что сам ХМЛ уместится на 2-3 экранах с прокруткой =) (это не пол мегабайта текста - факт) без 10 колений вложенности точно.

Так. Понедельник блин...
Код:
	for(my_node = book_xml3; my_node!=null; my_node = my_node.nextSibling){
		if(my_node.nodeName == "characterInfo"){
			break;
		}

	trace(my_node.nodeName);
	}
Так тоже ничего. Трейс позвращает null. Я чего то не пойму, но не пойму чего именно. То что в my_node скидывается ХМЛ я уверен. Проверил засунув в цикл "my_node.childNodes[0].childNodes[0].childNodes[0].attributes.name" и он вернул мне правильное значение.


Последний раз редактировалось Shinoby; 14.04.2008 в 10:31.
Старый 14.04.2008, 15:07
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 9  
Ответить с цитированием
chingachgoog
Banned
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от Shinoby
Код:
	for(my_node = book_xml3; my_node!=null; my_node = my_node.nextSibling){
		if(my_node.nodeName == "characterInfo"){
			break;
		}

	trace(my_node.nodeName);
	}
Так тоже ничего. Трейс позвращает null. Я чего то не пойму, но не пойму чего именно. То что в my_node скидывается ХМЛ я уверен. Проверил засунув в цикл "my_node.childNodes[0].childNodes[0].childNodes[0].attributes.name" и он вернул мне правильное значение.
Проверять надо не так, а просто поставить трейс перед циклом:

Код:
trace("my_node="+my_node.nodeName);
	for(my_node = book_xml3; my_node!=null; my_node = my_node.nextSibling){
		if(my_node.nodeName == "characterInfo"){
			break;
		}

	trace(my_node.nodeName);
	}
После чего станет понятно, почему произошла ошибка и что такое корневой узел.
А ваша проверка:
my_node.childNodes[0].childNodes[0].childNodes[0].attributes.name
ничего не дает, т.к. никоим образом не соответствует my_node.nodeName

Цитата:
Сообщение от udaaff
Ты часто видел xml с 256 уровнями вложенности?
Ни разу, т.к. я сам для себя xml и пишу. Но представить такое вполне могу - особенно при правильном нежелании пользоваться аттрибутами.

Цитата:
Сообщение от iNils
Учитывая, что это код мой, то он все обходит, только вместо or, сейчас надо использовать ||
Если я правильно понял, то or относилось к разработчику кода, мол "парни, выбирайте, что вам больше нравится: либо hasChildNodes либо childNodes.length". Или нет?

Старый 14.04.2008, 15:19
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Цитата:
Сообщение от chingachgoog
Если я правильно понял, то or относилось к разработчику кода, мол "парни, выбирайте, что вам больше нравится: либо hasChildNodes либо childNodes.length". Или нет?
Или нет, этот код я писал 3 года назад и уже не помню почему так сделал.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

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

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


 


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


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