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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > Action script 2.0

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

Регистрация: Jun 2002
Адрес: Zenkov
Сообщений: 8
По умолчанию Научите сделать рекурсию по данным импортированных с xml файла

Есть файл, приблизительно:
Код:
<?xml version="1.0" encoding="Windows-1251"?>
<menu_list>
	<restoraund>
			<menu_element>data</menu_element>
			<menu_element>data</menu_element>
			<menu_element>data</menu_element>
			<menu_element>data</menu_element>
			...
	</restoraund>
	<magaziund>
		<podmenu_element>
				<menu_element>data</menu_element>
				<menu_element>data</menu_element>
				<menu_element>data</menu_element>
				...
		</podmenu_element>
			<menu_element>data</menu_element>
			<menu_element>data</menu_element>
			<menu_element>data</menu_element>
			...
	</magaziund>
</menu_list>
Сколько у него елементов и вложений заранее не известно.
Как вывести командой trace() все значения?
Буду очень благодарин, тому кто поможет.

Старый 23.11.2004, 16:03
Onic вне форума Посмотреть профиль Отправить личное сообщение для Onic Посетить домашнюю страницу Onic Найти все сообщения от Onic
  № 2  
Onic

Регистрация: Jun 2002
Адрес: Zenkov
Сообщений: 8
Вот переписываю из учебника функцию рекурсии obhod(), подсчитывающую количество узлов в документе.
Она получает ссылку на узел и увеличивает значение переменной-счетчика на единицу. Затем она проверяет, есть ли у узла дочерние узлы. Если они есть, то создается еще одна активация функции и ей передается ссылка на первый дочерний узел. Далее функция проверяет, имеется ли узел, который был бы прописан после данного. Если он обнаруживается, то ссылка на него передается новой активации obhod().

Код:
var myXML:XML=new XML("<text><t1/><data>привет</data><t3/></text>");
var col:Number=0;
function obhod(node:XMLNode):Void {
	col++;
	if (node.hasChildNodes()) {
		obhod(node.firstChild);
	}
	if (node.nextSibling != null) {
		obhod(node.nextSibling);
	}
}
obhod(myXML.firstChild);
trace(col); //Выводит 5
Теперь немного изменим код:
Код:
var myXML = new XML();
myXML.load("myxml.xml");
var col:Number=0;
myXML.onLoad = function() {
function obhod(node:XMLNode):Void {
	col++;
	if (node.hasChildNodes()) {
		obhod(node.firstChild);
	}
	if (node.nextSibling != null) {
		obhod(node.nextSibling);
	}
}
obhod(myXML.firstChild);
trace(col); //Выводит 0 ЧТО НЕ ПРАВИЛЬНО
}
Содержимое файла myxml.xml такое:
Код:
	<LES>
		<dub>
			<vetochka1>
				<listik1/>
				<listik2/>
				<listik3/>
			</vetochka1>
			<vetochka2/>
			<duplo vduple="meda polno"/>
		</dub>
		<sosna>
			<krona>
				<igolka1/>
				<igolka2/>
				<igolka100/>
			</krona>
		</sosna>
		<lipa>
			<vetochka1 pochka="4"/>
			<vetochka2 pochka="10"/>
			<vetochka3 pochka="0"/>
		</lipa>
		<kamen oblom="у него есть остаток какого-то хрена"/>
	</LES>
Помогите найти Ошибку!!!


Последний раз редактировалось Onic; 23.11.2004 в 16:05.
Старый 23.11.2004, 16:08
Onic вне форума Посмотреть профиль Отправить личное сообщение для Onic Посетить домашнюю страницу Onic Найти все сообщения от Onic
  № 3  
Onic

Регистрация: Jun 2002
Адрес: Zenkov
Сообщений: 8
Я уже попробовал ради интереса в файл myxml.xml вписать <text><t1/><data>привет</data><t3/></text>, но результат остался тот же, колличество узлов = 0.

Старый 23.11.2004, 17:36
Onic вне форума Посмотреть профиль Отправить личное сообщение для Onic Посетить домашнюю страницу Onic Найти все сообщения от Onic
  № 4  
Onic

Регистрация: Jun 2002
Адрес: Zenkov
Сообщений: 8
Вот модифицировал код. Хотел получить значения нодов.
Код:
var myXML:XML = new XML("<text><t1/><data2>привет</data2><t3/><t4/>
<data5>привет5</data5><t6/>
<data7><m1>YO!</m1></data7><t8/>
<data9><m2><mv>UPS!</mv></m2></data9><t10/></text>");
var col:Number = 0;
// счетчик, выдает колличество узлов в данных (18 в данном случае)
function obhod(node:XMLNode):Void {
	col++;
	if (node.hasChildNodes()) {
		//trace(node.firstChild);
		obhod(node.firstChild);
	}
	if (node.nextSibling != null) {
		//trace(node.nextSibling);
		//trace(node.nextSibling.nodeName);
		//trace(node.nextSibling.nodeValue);
		if (node.firstChild != null) {
			trace(node.firstChild); //выводит содержание нода в окно Output
		}
		obhod(node.nextSibling);
	}
}
obhod(myXML.firstChild);
trace(col);
/* поскольку счетчик считает все узлы (любой вложенности), значит он полностью 
обходит дерево и можно узнать колличество вложений. 
Не получается все же вывести ЛЮБЫЕ вложения, выводит ноды (<m1>YO!</m1>).
*/
Можно просто скопировать и вставить в новый флеш файл, что бы увидеть.

Но ВСЕ РАВНО не работает, если данные грузятса из внешнего myxml.xml, даже если они в нем едентичны.

Уже не знаю что делать. Как только не пытался
Я плякать


Последний раз редактировалось Onic; 23.11.2004 в 17:40.
Старый 24.11.2004, 09:13
  № 5  
Linuxoid_Alex
Guest

Сообщений: n/a
количество подузлов мона получить через childNodes.length
Обход дерева:
Код:
function GetTree(node)
{
  if (node.childNodes.length!=0)
  {
    for (var i=0;i<node.childNodes.length;i++)
    {
      if (node.childNodes[i].nodeValue!=undefined)
      {
        trace(node.childNodes[i].nodeName);
        trace(node.childNodes[i].nodeValue);
      }
      GetTree(node.childNodes[i]);
    }
  }
}
doc = new XML();
doc.load('data.xml');
doc.onLoad = function()
{
  GetTree(doc.firstChild);
}
За работоспособность не отвечаю, не проверял

Старый 25.11.2004, 15:23
Onic вне форума Посмотреть профиль Отправить личное сообщение для Onic Посетить домашнюю страницу Onic Найти все сообщения от Onic
  № 6  
Onic

Регистрация: Jun 2002
Адрес: Zenkov
Сообщений: 8
не получилось. потому что
trace(childNodes.length);
выводит 0


хотя в ListVariables
Код:
Level #0:
Variable _level0.$version = "WIN 7,0,19,0"
Variable _level0.GetTree = [function 'GetTree']
Variable _level0.doc = [object #2] {
    
      <LES>
        <dub>
          <vetochka1>
            <listik1 />
            <listik2 />
            <listik3 />
          </vetochka1>
          <vetochka2 />
          <duplo vduple="meda polno" />
        </dub>
        <sosna>
          <krona>
            <igolka1 />
            <igolka2 />
            <igolka100 />
          </krona>
        </sosna>
        <lipa>
          <vetochka1 pochka="4" />
          <vetochka2 pochka="10" />
          <vetochka3 pochka="0" />
        </lipa>
        <kamen oblom="у него есть остаток какого-то хрена, наверно девки, что на речку бегали да поотломали для забавы" />
      </LES>
  }

Старый 26.11.2004, 03:06
Штрек вне форума Посмотреть профиль Отправить личное сообщение для Штрек Найти все сообщения от Штрек
  № 7  
Штрек

Регистрация: Dec 2002
Адрес: Сочи
Сообщений: 2,819
Чего Америку изобретать..
Сюда
или
сюда

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

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

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


 


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


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