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

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

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

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
По умолчанию Фильтрация в XML - какая же там область видимости?

Здравствуйте уважаемые.
Вопрос чисто теоретический. Допустим у меня стоит задача выбрать узлы для обработки. При этом ранг для фильтра хранится в переменной. Мне пришло в голову а что будет если с таким же именем тег окажется в списке потомков узла. Пробуем.
Код AS3:
id = "6";
xml = <a>
  <b id="7"/>
  <b id="6">
      4
  </b>
  <b id="3"> 
      тест
      <id>3</id>
  </b>
</a>;
делаем фильтр.
Код AS3:
xml.b.(@id == id);
Попробовал подставить в условие значение переменной как при формировании XML через фигурные скобки
Код AS3:
xml.b.(@id == { id } );
компилятор ругается.
Убираю скобку работает. При чем выбирает два элемента. Например если переменная id == "6" выбирается второй элемент и последний. Это что же выходит, что область видимости перебирает все возможные варианты прежде чем дать ответ?
Как четко добиться однозначности откуда брать данные для сравнения?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

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

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Честно говоря вы как-то сумбурно все описали. Немного не понятно что вы надеялись получить.
__________________
#flasher@irc.trg.ru:6667

Старый 15.07.2009, 15:26
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 3  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
у меня стоит задача удалить из файла xml все тэги имеющие определенный признак со значением указанным в переменной. Вот так первый удаляю например
Код AS3:
id = "32";
delete xml.b.(@id == id)[0];
но у меня нет уверенности что у одного из элементов <b> не окажется вложенных <id>, а это может повлиять на результат работы. Файл грузится извне и может быть всякое.
Я же написал вопрос больше теоретический. Работать будет (с оговорками для тех кто скрипты для формирования xml пишет). Мне любопытно как получить однозначность. Внутри метода this.id написал и получил свойство класса и уверен что никакая локальная переменная id нигде не возникнет. А вот здесь получается так не пропишешь. E4X сам решает что выбирать.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS1/AS2:
var id:String = "6";
var xml:XML = <a>
  <b id="7"/>
  <b id="6">
      4
  </b>
  <b id="3"> 
      тест
      <id>3</id>
  </b>
</a>;
 
trace(xml.b.(@id == this.id).toXMLString());


Если нужно однозначно указать на контекст фильтруемого узла -
Код AS3:
var id:String = "6";
var xml:XML = <a>
  <b id="7"/>
  <b id="6">
      4
  </b>
  <b id="3"> 
      тест
      <id>3</id>
  </b>
</a>;
 
trace(xml.b.(@id == valueOf().id).toXMLString());
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 15.07.2009 в 15:33.
Старый 15.07.2009, 15:34
DeliMIter вне форума Посмотреть профиль Отправить личное сообщение для DeliMIter Найти все сообщения от DeliMIter
  № 5  
Ответить с цитированием
DeliMIter
некрофил
 
Аватар для DeliMIter

Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,291
Бывает, как в данном случае, что выполняемый код имеет одновременно несколько контекстов, в которых ищется поле с заданным именем. Указывай контекст, и всё будет хорошо.

Код AS3:
var id:String = "6";
var xml:XML = <a>
  <b id="7"/>
  <b id="6">
      4
  </b>
  <b id="3"> 
      тест
      <id>3</id>
  </b>
</a>;
 
trace((xml.b.(@id == this.id)).toXMLString());
__________________
...убивать людей не удовольствия ради, но для еды.

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
@ DeliMIter:
__________________
Hell is the possibility of sanity

Старый 15.07.2009, 15:35
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 7  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
а ежели id есть в классе и локально в методе?)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 15.07.2009, 15:36
DeliMIter вне форума Посмотреть профиль Отправить личное сообщение для DeliMIter Найти все сообщения от DeliMIter
  № 8  
Ответить с цитированием
DeliMIter
некрофил
 
Аватар для DeliMIter

Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,291
Дежа вю, ггг.

Добавлено через 1 минуту
Цитата:
Сообщение от SunShadow Посмотреть сообщение
а ежели id есть в классе и локально в методе?)
В этом случае помогает ёмкость с водой, в каковую следует макать головой разработчика.
__________________
...убивать людей не удовольствия ради, но для еды.

Старый 15.07.2009, 15:40
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 9  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
а для указания что это с элементов пишем elements();
Чтож ваша мысля понятна. Ничего когда нибудь и я столько прогеров съем что буду жутко вумный и вы не будете надо мной потешаться
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS3:
var id:String = "6";
var xml:XML = <a>
  <b id="7"/>
  <b id="6">
      4
  </b>
  <b id="3"> 
      тест
      <id>3</id>
  </b>
</a>;
function f(xl:XML):void
{
	var id:String = "7";
	trace(xml.b.(@id == id && (id is String)).toXMLString()); // <b id="7"/>
	trace(xml.b.(@id == this.id && (this.id !== id)).toXMLString()); // <b id="6">4</b>
	trace(xml.b.(@id == valueOf().id).toXMLString());
	// <b id="3">
	//	  тест
	//	  <id>3</id>
	//	</b>
}
f(xml);
Единственная проблема тогда - что делать, если локальная переменная имеет то же значение, что и поле класса... Но вообще - да, в таких случаях, проще отпинать автора кода, чем придумывать извращенные решения...
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 15.07.2009 в 15:46.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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