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

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

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

Регистрация: Jul 2005
Сообщений: 34
По умолчанию Массивы

Пишу рекурсивную функцию прохода по XML.
Данная радость должна возвращать инфу про исследуемый узел в виде массива, но, почему-то, делать этого не хочет, хотя все узлы пробегаются - я проверял.

Код:
class XmlParser {
	var xml:XML;
	public function XmlParser() {
		this.xml = new XML();
		this.xml.ignoreWhite = true;
	}
	public function loadFromString(_string:String) {
		this.xml.parseXML(_string);
	}
	function parseNode(_xmlNode) {
		if (!_xmlNode) {
			return false;
		}
		var curArray:Array = new Array();
		var i:Number;
		curArray["nodeName"] = _xmlNode.nodeName;
		curArray["nodeType"] = _xmlNode.nodeType;
		if (_xmlNode.nodeType == 1) {
			for (i=0; i<_xmlNode.childNodes.length; i++) {
				curNode = null;
				var curNode:XMLNode = _xmlNode.childNodes[i];
				if (curNode) {
					curArray["childNodes"][i] = this.parseNode(curNode);
				}
			}
		}
		if ( _xmlNode.nodeType == 3 ) {
			curArray["nodeValue"] = _xmlNode.nodeValue;
		}
		return curArray;
	}
	
	public function toArray() {
		return this.parseNode(this.xml.firstChild);
	}
}
пы.сы. да и вообще когда пытаюсь оттрейсить какой-нить массив - он молчит =(
пы.пы.сы. когда через дебаг пробую посмотреть List Variables, то массив он мне мой показывает, но никаких childNodes в нем нету =( - не пишется туды ничего..

Старый 02.10.2006, 13:56
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А где объявление того, что curArray['childNodes'] — массив?

з.Ы. Про объявление public/private и типа возвращаемых данных умолчу.

Старый 02.10.2006, 19:36
sart вне форума Посмотреть профиль Отправить личное сообщение для sart Найти все сообщения от sart
  № 3  
Ответить с цитированием
sart

Регистрация: Jul 2005
Сообщений: 34
__etc, пасип. объявил, что массив, уже стало легче, но, все-же не все пока бегает.

на тему остального, так правильнее? =)

Код:
class XmlParser {
	private var xml:XML;
	public function XmlParser() {
		this.xml = new XML();
		this.xml.ignoreWhite = true;
	}
	public function loadFromString(_string:String) {
		this.xml.parseXML(_string);
	}
	public function parseNode(_xmlNode):Array{
		if (!_xmlNode) {
			return false;
		}
		var curArray:Array = new Array();
		var i:Number;
		curArray["nodeName"] = _xmlNode.nodeName;
		curArray["nodeType"] = _xmlNode.nodeType;
		if (_xmlNode.nodeType == 1) {
			for (i=0; i<_xmlNode.childNodes.length; i++) {
				curArray["childNodes"] = new Array();
				curNode = null;
				var curNode:XMLNode = _xmlNode.childNodes[i];
				if (curNode) {
					curArray["childNodes"][i] = this.parseNode(curNode);
				}
			}
		}
		if ( _xmlNode.nodeType == 3 ) {
			curArray["nodeValue"] = _xmlNode.nodeValue;
		}
		return curArray;
	}
	
	public function toArray() {
		return this.parseNode(this.xml.firstChild);
	}
}

Старый 02.10.2006, 19:47
miramax вне форума Посмотреть профиль Отправить личное сообщение для miramax Посетить домашнюю страницу miramax Найти все сообщения от miramax
  № 4  
Ответить с цитированием
miramax
 
Аватар для miramax

Регистрация: Oct 2005
Адрес: Борисоглебск
Сообщений: 1,702
Отправить сообщение для miramax с помощью ICQ Отправить сообщение для miramax с помощью AIM Отправить сообщение для miramax с помощью MSN Отправить сообщение для miramax с помощью Yahoo Отправить сообщение для miramax с помощью Skype™
А зачем рекурсия?
Вот, писал когда-то чрезвычайно полезную функцию.
Код:
function nextNode(node_xml:XMLNode):XMLNode {
	if (node_xml.hasChildNodes() == true) return (node_xml.firstChild);
	else while (node_xml.nextSibling == null && node_xml.parentNode != null) node_xml = node_xml.parentNode;
	return (node_xml.nextSibling);
}
А обойти всё дерево можно так
Код:
xmlDoc = new XML("<A><C/></A><B/>")
xm = xmlDoc.firstChild

i = 0
while(xm!= null && xm != undefined)
{
     i+=1
     trace('нод № '+i)
     trace(xm)
     xm = nextNode(xm)
}
Позволяет просто перебрать все подряд ноды в дереве. Можно сделать перебор внутри одного нода, если поставить другие условия в while
__________________
AS3 | www.FLAPS.ru | Русские флэшеры самые умные флэшеры в мире. ©


Последний раз редактировалось iNils; 02.10.2006 в 19:57.
Создать новую тему Ответ Часовой пояс GMT +4, время: 11:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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