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

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

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

Регистрация: Oct 2007
Адрес: Russia::Tomsk
Сообщений: 11
Отправить сообщение для Elandor с помощью ICQ
Question Чтение XML. Методы: text(), elements(), children(), nodeKind()

Всем доброго времени суток.

Есть некий XMLList:
Код:
<span>str1</span>
str2
<span>str3</span>
<span>str4</span>
str5
...
который нужно последовательно обойти, то есть после обработки "<span>str1<span>" перейти к "str2", а не к следующему span'у.

Теперь собственно вопрос, как это можно реализовать? Через методы elements() и text() можно получить доступ либо к одному, либо к другому.

У меня есть идея с предварительным обходом XMLList и составлением "очереди"... но она скорее всего получится неприлично громоздкой (по крайней мере в моей реализации)). Уверен, что есть очень простое решение, но голова уже мало что соображает. Прошу хотя бы намекнуть что и в каком направлении искать.

Заранее благодарен.


Последний раз редактировалось Elandor; 16.03.2009 в 17:54.
Старый 16.03.2009, 00:15
serenkiy вне форума Посмотреть профиль Отправить личное сообщение для serenkiy Найти все сообщения от serenkiy
  № 2  
Ответить с цитированием
serenkiy
 
Аватар для serenkiy

Регистрация: Jan 2009
Сообщений: 60
Отправить сообщение для serenkiy с помощью ICQ
придется постоянно проверять, есть ли у узла дочерние узлы. Т.е. вы проводите обход XML дерева, проверяете поочередно узлы (узлы их узлов и т.п.) на существование, и если они есть - проводить требуемые действия и проверять дальше. Лучше это сделать рекурсивной функцией на мой взгляд.

Старый 16.03.2009, 00:59
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS3:
var xml:XML =
<data>
	<span>str1</span>
	str2
	<span>str3</span>
	<span>str4</span>
	str5
</data>;
xml.*.(nodeKind() == "text" ? 
		trace("this is text: ", toXMLString()) : 
		trace("not text: ", toXMLString()));
__________________
Hell is the possibility of sanity

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

Регистрация: Jan 2009
Сообщений: 60
Отправить сообщение для serenkiy с помощью ICQ
скорее всего нужно проверять (nodeKind() != null). Касательно этой темы могу порекомендовать книгу "ActionScript 3.0. Сборник рецептов", она продается в многих магазинах (ну или можно поискать сканы в интернете). Там касательно вашей проблемы выделена целая глава. Там Вы так же для себя узнаете много интересных "фишек" касательно работы с XML. Написано все очень грамотно и понятно, подчерпнете много интересной информации на будущее

Старый 16.03.2009, 01:15
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 5  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
>> скорее всего нужно проверять (nodeKind() != null).
Надеюсь, что в этой книге ничего подобного не написано...
1. проверять на нестрогое неравенство с null - это уже абсурдно само по себе.
2. nodeKind() не может возвращать null ни при каких обстоятельствах... вы хоть в мануал загляните, перед тем, как советовать.
__________________
Hell is the possibility of sanity

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

Регистрация: Jan 2009
Сообщений: 60
Отправить сообщение для serenkiy с помощью ICQ
Согласен, это абсурд полнейший и в книге Вы такого не найдете. На самом деле я опечатался, параллельно думал о hasSimpleContent(), hasComplexContent() и прочих методах, в рез-те получился такой бред. Сейчас протестирую один подход, если получится, опубликую рез-т.

Добавлено через 40 минут
Код AS3:
private function getData(node:XML):void {
	for (var i:int = 0; i < node.children().length(); i++) {
		trace(node.children()[i]);
	}
}
Для Вашего XML документа будет след. результат:
Код:
str1
str2
str3
str4
str5

Старый 16.03.2009, 17:52
Elandor вне форума Посмотреть профиль Отправить личное сообщение для Elandor Найти все сообщения от Elandor
  № 7  
Ответить с цитированием
Elandor

Регистрация: Oct 2007
Адрес: Russia::Tomsk
Сообщений: 11
Отправить сообщение для Elandor с помощью ICQ
Ночью таки дописал вариант с "очередью". Днём дошло, что есть ещё children() - быстренько исправил код, пока никто не заметил

А вот с nodeKind() ни разу ещё работать не приходилось, буду знать.

serenkiy, wvxvw
Ещё раз спасибо.

P.S.: если имелась в виду книжка за авторством Лотта, Шалла и Питерса, то есть такая. Иногда к ней обращаюсь, если в хелпе чего не понятно)

Подправил название темы.

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

Теги
elements() , text() , xml

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

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


 


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


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