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

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

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

Регистрация: May 2011
Адрес: Севастополь
Сообщений: 15
Question Разбор XML

Уважаемые форумчане, помогите разобраться.

Все ни как не могу разобраться как работать с xml

Задача в следущем:
1. создание xml
2. загрузить его во флеш
3. создать и добавить данные из xml в массив объектов.

мои действия:

1. XML структура:
Код:
<?xml version="1.0" encoding="utf-8"?>
<games>
	<level id="1" small="images/small_1.jpg" big="images/big_1.jpg">
		<tags id="1" obj="некий объект" text="некий текст"></tags>
		<tags id="2" obj="некий объект" text="некий текст"></tags>
	</level>
	<level id="2" small="images/small_2.jpg" big="images/big_2.jpg">
		<tags id="1" obj="некий объект" text="некий текст"></tags>
		<tags id="2" obj="некий объект" text="некий текст"></tags>
	</level>
	<level id="3" small="images/small_3.jpg" big="images/big_3.jpg">
		<tags id="1" obj="некий объект" text="некий текст"></tags>
		<tags id="2" obj="некий объект" text="некий текст"></tags>
	</level>
</games>
2. загружаю его во флеш:
Код AS1/AS2:
class action.rad.all.Game  extends MovieClip {
 
	private var gameArray:Array;
 
	public function Game() {
 
		gameArray = new Array();
 
		var xmlData:XML = new XML();
		xmlData.ignoreWhite = true;
		xmlData.onLoad = loadXML;
		xmlData.load('xml/myxml.xml');
 
		function loadXML (success:Boolean)
		{	
			if (success){
				var node:XMLNode = this.firstChild ;
				var total:Number = node.childNodes.length ;	
				for(var i:Number = 0; i < total; i++){
					var fName:String = node.childNodes[i].attributes['small'];			
					trace(fName);
 
					gameArray[i] = fName; - выводлит undefine - не могу понять почему 
                                        //gameArray.push(fName) - выводит так же undefine
				}
			}else {
				trace ('Ошибка при загрузке xml');
			}
 
			trace ('gameArray: ' + gameArray);
		}
	}
}
Проблема в том, что я не знаю как добавить элементы в массив и по мимо всего прочего у каждого тега level есть дочерние элементы, как создать массив объектов примерно такого типа из этой структуры

Код:
someObject[0]
{
obj.id = level_id
obj.small = level_small
obj.big = level_big
obj.tags = level.tags.id = i (их же может быть неограниченное колличество)
}
someObject[1]
{
obj.id = level_id
obj.small = level_small
obj.big = level_big
obj.tags = level.tags.id = i (их же может быть неограниченное колличество)
}
и так далее
я запутался уже с xml ...

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

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
attributes.small

Дочерние - вставьте еще один цикл и:

node.childNodes[i].childNodes[j].attributes
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 27.05.2011, 16:12
shmblra вне форума Посмотреть профиль Отправить личное сообщение для shmblra Найти все сообщения от shmblra
  № 3  
Ответить с цитированием
shmblra

Регистрация: May 2011
Адрес: Севастополь
Сообщений: 15
а в массив не добавляет ...

немного переделал структуру, при помощи callBack функции

а вот как теперь построить массив объектом ?
Код AS1/AS2:
class action.rad.all.Game  extends MovieClip {
 
 
	private var xmlData:XML;
	private var gameObject:Object;
 
	//Конструктор Класса
	public function Game() {
 
		xmlData =  new XML();
		xmlData.ignoreWhite = true;
		xmlData.onLoad = callBack (this, loadXML);
		xmlData.load('xml/myxml.xml');
 
	}
	//Функция разбора XML, создает Массив Объектов.
	private function loadXML (success:Boolean) {	
 
		if (success) {
			var node:XMLNode = xmlData.firstChild ;
			var total:Number = node.childNodes.length ;	
 
			for (var i:Number = 0; i < total; i++) {
 
				var pp:XMLNode = node.childNodes[i];
				if (pp.nodeName == 'level') {
 
					trace ('small: ' + pp.attributes.small);
					trace ('big: ' + pp.attributes.big);
 
					for (var j:Number = 0; j < pp.childNodes.length; j++) {
 
						var zz:XMLNode = pp.childNodes[j];
						if (zz.nodeName == 'tags') {
 
							trace ('obj: ' + zz.attributes.obj);
							trace ('text: ' + zz.attributes.text);
						}
					}
				}
				trace ('----------------');
			}
		}else {
			trace ('Ошибка при загрузке xml');
		}
	}
	//Возвращает функцию. Влияет на область видимости
	private function callBack (scope, func, par):Function {
		return function () { 
			if (par != undefined ) {
				func.call(scope, arguments, par);
			} else {
				func.call(scope, arguments);
			}
		}
	}
}

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

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

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


 


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


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