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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.10.2011, 01:39
savva вне форума Посмотреть профиль Отправить личное сообщение для savva Найти все сообщения от savva
  № 1  
Ответить с цитированием
savva
[+ 06.08.11]

Регистрация: Jul 2011
Сообщений: 79
По умолчанию Обход xml

Здравствуйте,наверняка неоднократно поднимался подобный вопрос,но поиск не выявил необходимый мне ответ.

не получается сделать рекурсвиный обход такого XML файла

Код AS3:
<?xml version="1.0" encoding="UTF-8"?>
<images head="начальное изображение" >
<curs x="1" y="1">
	<image src="2"/>
		<curs x="11" y="33">
			<image src="22"/>
			<curs x="11" y="13">
				<image src="22"/>
			</curs>
		</curs>
		<curs x="1" y="1">
			<image src="2"/>
			<curs x="31" y="22">
				<image src="21"/>
			</curs>
		</curs>
		<curs x="123" y="324">
			<image src="123"/>
			<curs x="3121" y="4121">
				<image src="1241"/>
			</curs>
		</curs>
</curs>
</images>
Помогите пожалуйста.

примерно так предполагаю сделать :

Код AS3:
	private function sss(_obj:XMLList,parent:Vertex):void
		{
			for (var i:Number = 0; i < _obj.length(); i++)
			{
				var object:Object = _obj[i];
				trace(object.@x, object.@y);
				//trace(object.image.@src);
				parent.getImg().addPointer(new Pointer(new Point(object.@x, object.@y)));
				var y:Image = new Image(object.image.@src);
				var x:Vertex = new Vertex(y);
				parent.addVertexbyVertex(x);
				var list:XMLList = _obj.child("curs");
				trace(list);
				sss(list, x);
			}
		}
Функция работает почти правильно.
вот trace её работы
Код:
1 1
<curs x="11" y="33">
  <image src="22"/>
  <curs x="11" y="13">
    <image src="22"/>
  </curs>
</curs>
<curs x="1" y="1">
  <image src="2"/>
  <curs x="31" y="22">
    <image src="21"/>
  </curs>
</curs>
<curs x="123" y="324">
  <image src="123"/>
  <curs x="3121" y="4121">
    <image src="1241"/>
  </curs>
</curs>
11 33
<curs x="11" y="13">
  <image src="22"/>
</curs>
<curs x="31" y="22">
  <image src="21"/>
</curs>
<curs x="3121" y="4121">
  <image src="1241"/>
</curs>
11 13

31 22

3121 4121

1 1
<curs x="11" y="13">
  <image src="22"/>
</curs>
<curs x="31" y="22">
  <image src="21"/>
</curs>
<curs x="3121" y="4121">
  <image src="1241"/>
</curs>
11 13

31 22

3121 4121

123 324
<curs x="11" y="13">
  <image src="22"/>
</curs>
<curs x="31" y="22">
  <image src="21"/>
</curs>
<curs x="3121" y="4121">
  <image src="1241"/>
</curs>
11 13

31 22

3121 4121
Проблема в следующем мне нужно,чтобы программа возвращалась на уровень наверх,как только она доходит до конца.Точнее даже на n -ое количество уровней. То бишь функция сначала обходила 1 ветку,потом вторую и так далее. Сейчас парсер каждый раз собирает curs со всех веток одно уровня и получается что некоторые элементы печатаются по несколько раз.


Последний раз редактировалось savva; 03.10.2011 в 02:21. Причина: Новый вопрос:)
Старый 03.10.2011, 02:20
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Долго думал... и понял, что я не понимаю вопрос.
Если под "на уровень наверх" подразумевается, что нужно еще раз передать в функцию родительский узел и всех его "братьев", то как вы тогда планируете завершить выполнение функции? Если на уровень наверх - значит к самому первому узлу, то есть 2 варианта: передавать его отдельным параметром, а если передали null, то значит что его нужно назначить (в таком случае лучше передавать в функцию не список детей, а родителя). Другой вариант. Просто обработать корневой узел отдельно (еще вопрсо для чего это нужно?).

Из отдельных замечаний: лучший вариант из циклов для решения вашей задачи - for-each. Обычный for имеет смысл использовать, если вы планируете использовать счетчик. Тип Number плохо подходит для счетчика циклов т.как это число с плавающей запятой. Есть смысл его использовать если вы предполагаете, что значение счетчика может быть больше максимального int или uint.
Код AS3:
_obj.child("curs");
и
Код AS3:
_obj.curs;
идентичны.
Если вы уже в одном месте использовали композицию функций, то имеет смысл быть последовательным, и делать это всегда, иначе у читателя возникает недоумение (он будет ждать, что вы используете переменную где-то еще раз, и будет искать это место, а его... нет). Я имею в виду вот это:
Код AS3:
var y:Image = new Image(object.image.@src);
var x:Vertex = new Vertex(y);
parent.addVertexbyVertex(x);
переменная y нигде далее не используется, но код
Код AS3:
var x:Vertex = new Vertex(new Image(object.image.@src));
parent.addVertexbyVertex(x);
Идентичен коду выше.
__________________
Hell is the possibility of sanity

Старый 03.10.2011, 02:30
savva вне форума Посмотреть профиль Отправить личное сообщение для savva Найти все сообщения от savva
  № 3  
Ответить с цитированием
savva
[+ 06.08.11]

Регистрация: Jul 2011
Сообщений: 79
Да,извините за сумбур,каждую минуту редактирую вопрос.
Код AS3:
var y:Image = new Image(object.image.@src);
var x:Vertex = new Vertex(y);
parent.addVertexbyVertex(x);
я знаю просто не до этого сейчас


Ещё раз попробую описать вопрос.

Я из xml файла делаю дерево (для пошаговой бродилки по зданию).
Хочу обходить дерево следующим образом.
Взял первый curs и прошёл его до упора (не знаю как посмотреть если дети у узла ),потом перешёл на следующий curs. То есть каждой итерацией я создаю целу ветку дерева.

Добавлено через 5 минут
Всё,я нашёл свою ошибку в функции:

Код AS3:
var list:XMLList = _obj.child("curs");
заменить
на
Код AS3:
var list:XMLList = object.child("curs");

Создать новую тему Ответ Часовой пояс 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
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.