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

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

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

Регистрация: Sep 2010
Адрес: Москва
Сообщений: 24
Question Удалить XML узел не зная его индекс, но зная значение одного из его атрибутов

Здравствуйте.
Появилась задача:
есть объект XML
Код AS3:
		var outPutXML:XML = new XML(
		<root>
		<pathGrid>
		</pathGrid>
		<boards>
		</boards>
		<image path=""/>
		</root>
		);
Заполняется он динамически.
Код AS1/AS2:
		function addPathPoint (e:MouseEvent):void {
			var point:CasaMovieClip = new CasaMovieClip();
			outPutXML.pathGrid.appendChild (<pointGrid id={Main.pointsCounter} x={new int(pathGridPano.mouseX)} y={new int(pathGridPano.mouseY)} />);
			point.addEventListener (MouseEvent.MOUSE_DOWN,movePoint);
			point.addEventListener (MouseEvent.MOUSE_UP,editGridPoint);
 
			point.graphics.beginFill (0xff0000);
			point.graphics.drawCircle (0,0,5);
			point.graphics.endFill ();
 
			point.x = pathGridPano.mouseX;
			point.y = pathGridPano.mouseY;
			point.name = new String(Main.pointsCounter);
			pathGridPano.addChildAt (point,0);
			Main.pointsCounter++;
		}
в итоге получается что то типа такого:
Код:
<pathGrid>
  <pointGrid id="0" x="262" y="169"/>
  <pointGrid id="1" x="304" y="171"/>
  <pointGrid id="2" x="379" y="159"/>
  <pointGrid id="3" x="294" y="107"/>
</pathGrid>
Вопрос как мне удалить или изменить определенный узел, если я не могу знать его индекс.
Если точнее, у меня есть метод который должен этим заниматься, даже 2.
Код AS3:
		function movePoint (e:MouseEvent) {
			if (e.ctrlKey) {
                                /*
                                   код удаляющий узел из объекта outPutXML - с ним как раз проблема
                                */
				e.target.destroy ();
			} else {
				e.target.startDrag ();
 
			}
		}
		function editGridPoint (e:MouseEvent) {
 
			e.target.stopDrag ();
                        /*
                           код изменяющий атрибуты x и y у редактируемого узла - с ним тоже проблемы
                        */
 
 
		}
при этом id атрибут узла который подвергается изменению/удалению - всегда равен e.target.name.

Старый 28.12.2010, 00:21
Anton Riot вне форума Посмотреть профиль Отправить личное сообщение для Anton Riot Посетить домашнюю страницу Anton Riot Найти все сообщения от Anton Riot
  № 2  
Ответить с цитированием
Anton Riot

Регистрация: Sep 2008
Адрес: Москва
Сообщений: 291
Отправить сообщение для Anton Riot с помощью ICQ
сколько элементов в pathGrid?

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

Регистрация: Sep 2010
Адрес: Москва
Сообщений: 24
насколько я знаю предикат возвращает объект XMLList, и если я правильно понимаю (но надеюсь что ошибаюсь) это не ссылка а новый объект XMLList.
Или я все же ошибаюсь?
так как первое что я попробовал это
Код AS3:
				delete outPutXML.pathGrid.pointGrid.(@id == e.target.name);
Цитата:
TypeError: Error #1119: Оператор "delete" с операндом типа XMLList не поддерживается.
хотя то что там 1 элемент возвращается это точно так как если сделать

Код AS1/AS2:
trace (outPutXML.pathGrid.pointGrid.(@id == e.target.name).@id);
то вернется верное значение атрибута id

Добавлено через 32 секунды
Цитата:
Сообщение от Anton Riot Посмотреть сообщение
сколько элементов в pathGrid?
произвольное количество

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
var xml:XML = 
<pathGrid>
	<pointGrid id="0" x="262" y="169"/>
	<pointGrid id="1" x="304" y="171"/>
	<pointGrid id="2" x="379" y="159"/>
	<pointGrid id="3" x="294" y="107"/>
</pathGrid>
delete xml.elements().(@id == "2")[0];
trace(xml.toXMLString());
__________________
Reality.getBounds(this);

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

Регистрация: Sep 2010
Адрес: Москва
Сообщений: 24
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Код AS3:
var xml:XML = 
<pathGrid>
	<pointGrid id="0" x="262" y="169"/>
	<pointGrid id="1" x="304" y="171"/>
	<pointGrid id="2" x="379" y="159"/>
	<pointGrid id="3" x="294" y="107"/>
</pathGrid>
delete xml.elements().(@id == "2")[0];
trace(xml.toXMLString());
да, спасибо - то что нужно
Код AS1/AS2:
				delete outPutXML.pathGrid.pointGrid.(@id == e.target.name)[0];
правда почему то последний элемент она отказывается удалять.
Ну то есть если сделать 4 элемента в узле pathGrid то удалить из них можно любые 3, один все равно останется, но это я уже покопаю у себя код, скорее всего где то что то закосячил.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
var xml:XML = 
<pathGrid>
	<pointGrid id="0" x="262" y="169"/>
	<pointGrid id="1" x="304" y="171"/>
	<pointGrid id="2" x="379" y="159"/>
	<pointGrid id="3" x="294" y="107"/>
</pathGrid>
delete xml.elements().(@id == "3")[0];
delete xml.elements().(@id == "2")[0];
delete xml.elements().(@id == "1")[0];
delete xml.elements().(@id == "0")[0];
trace(xml.toXMLString());  // <pathGrid/>
Добавлено через 14 минут
Оператор delete удаляет узел. Он не может удалить список. Это и есть Error #1119.
В свою очередь outPutXML.pathGrid.pointGrid.(@id == e.target.name) возвращает именно XMLList.
XMLList это индексированный список узлов, который, подобно массиву, дает доступ к этим узлам по индексу.
Если доподлинно известно, что id уникален (а иначе что это за id, да?)), то узел в этом списке всегда будет один, и иметь индекс [0]. И вот узел мы уже можем безболезненно удалить.
__________________
Reality.getBounds(this);

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

Регистрация: Sep 2010
Адрес: Москва
Сообщений: 24
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Оператор delete удаляет узел. Он не может удалить список. Это и есть Error #1119.
В свою очередь outPutXML.pathGrid.pointGrid.(@id == e.target.name) возвращает именно XMLList.
XMLList это индексированный список узлов, который, подобно массиву, дает доступ к этим узлам по индексу.
Если доподлинно известно, что id уникален (а иначе что это за id, да?)), то узел в этом списке всегда будет один, и иметь индекс [0]. И вот узел мы уже можем безболезненно удалить.
разобрался, все работало правильно, просто когда делается
Цитата:
trace (outPutXML.pathGrid);
а pathGrid у меня соответственно пустой и в данном случае именно он является корневым элементом, то я просто получаю пусто в консоль вывода, но визуально это выглядит будто в консоль вывода что то добавилось и глядя туда я то вижу предыдущий вывод в котором висит этот 1 элемент.
но если сделать как надо в данном случае то есть
Код AS3:
				trace (outPutXML.pathGrid.toXMLString());
то как раз и получаю то что мне и нужно - то что pathGrid у меня пустой.
Так что все работает, просто я довольно невнимателен бываю

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ага. И просто просьба на будущее - не надо цитировать предыдущее сообщение, оно итак перед глазами. Цитаты нужны для конкретизации фразы, которую Вы комментируете, или при ответе на старое сообщение, которое уже на другой странице.
Добро пожаловать на наш форум)) Удачи!
__________________
Reality.getBounds(this);

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

Регистрация: Sep 2010
Адрес: Москва
Сообщений: 24
Цитата:
И просто просьба на будущее - не надо цитировать предыдущее сообщение, оно итак перед глазами.
прошу прощения, тут я процитировал с той целью что б не получилось путаницы если кто то еще ответит пока я набираю сообщение, как например получилось с этим сообщением, началом которого является ответ на ваше удаленное сообщение, но поскольку сообщения нет, то получается как мое размышление на тему xmllist которое совершенно там левое.
И чтобы никто не решил что у меня последняя стадия шизофрении , я процитировал ваше сообщение в этот раз.
Цитата:
Добро пожаловать на наш форум)) Удачи!
спасибо.

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

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

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


 


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


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