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

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

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

Регистрация: Apr 2007
Сообщений: 57
По умолчанию Сложный xml

допустим имеется *.xml-файл приблизительного формата:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<contents>
	<mainText header="Жилой дом"><![CDATA[Современные квартиры и развитая инфраструктура. <br/><br/>Для просмотра деталей кликните на дом. ]]></mainText>
	<podjezd1>
		<etazh8>
			<flat1 price="810001"></flat1>
			<flat2 price="810002"></flat2>
			<flat3 price="810003"></flat3>
			<flat4 price="810004"></flat4>
			<flat5 price="810005"></flat5>
		</etazh8>
		<etazh9>
			<flat1 price="910001"></flat1>
			<flat2 price="910002"></flat2>
			<flat3 price="910003"></flat3>
			<flat4 price="910004"></flat4>
			<flat5 price="910005"></flat5>
		</etazh9>
		<etazh10>
			<flat1 price="101001"></flat1>
			<flat2 price="101002"></flat2>
			<flat3 price="101003"></flat3>
			<flat4 price="101004"></flat4>
			<flat5 price="101005"></flat5>
		</etazh10>
	</podjezd1>
	<podjezd2>
		<etazh5>
			<flat1 price="250001"></flat1>
			<flat2 price="250002"></flat2>
			<flat3 price="250003"></flat3>
			<flat4 price="250004"></flat4>
			<flat5 price="250005"></flat5>
		</etazh5>
		<etazh6>
			<flat1 price="260001"></flat1>
			<flat2 price="260002"></flat2>
			<flat3 price="260003"></flat3>
			<flat4 price="260004"></flat4>
			<flat5 price="260005"></flat5>
		</etazh6>
		<etazh7>
			<flat1 price="270001"></flat1>
			<flat2 price="270002"></flat2>
			<flat3 price="270003"></flat3>
			<flat4 price="270004"></flat4>
			<flat5 price="270005"></flat5>
		</etazh7>
		<etazh8>
			<flat1 price="280001"></flat1>
			<flat2 price="280002"></flat2>
			<flat3 price="280003"></flat3>
			<flat4 price="280004"></flat4>
			<flat5 price="280005"></flat5>
		</etazh8>
		<etazh9>
			<flat1 price="290001"></flat1>
			<flat2 price="290002"></flat2>
			<flat3 price="290003"></flat3>
			<flat4 price="290004"></flat4>
			<flat5 price="290005"></flat5>
		</etazh9>
		<etazh10>
			<flat1 price="301001"></flat1>
			<flat2 price="302002"></flat2>
			<flat3 price="303003"></flat3>
			<flat4 price="304004"></flat4>
			<flat5 price="305005"></flat5>
		</etazh10>
	</podjezd2>
	<podjezd3>
		<etazh1>
			<flat1 totalspace="110,96" rooms="3" room1="48,8" room2="19,26" room3="15,59" prijomka="3,78" wc="2,96" sub1="1,71" sub2="1,34" corridor="17,52" price="130001">sold</flat1>
			<flat2 totalspace="56,54" rooms="2" room1="16,08" room2="15,87" prijomka="2,88" wc="2,47" sub1="2,9" corridor="18,95" price="130002">reserved</flat2>
		</etazh1>
		<etazh2>
			<flat1 totalspace="47,95" rooms="1" room1="19,94" kitchen="14,1" wc="4,73" balcony="6,16" corridor="6,1" price="230001"></flat1>
			<flat2 totalspace="60,51" rooms="2" room1="19,09" room2="14,17" kitchen="10,95" wc="1,63" bath="3,77" balcony="2,66" corridor="10,13" price="230002"></flat2>
			<flat3 totalspace="79,42" rooms="3" room1="17,11" room2="15,98" room3="14,01" kitchen="11,19" wc="1,6" bath="3,62" balcony="6,08" corridor="11,22" sub1="1,65" price="230003">sold</flat3>
		</etazh2>
</contents>
(Взят для примера)

Как из него считывать данные? Я знаю как считывать с односложного, формата
Код:
<etazh10>
	<flat1 price="104001"></flat1>
	<flat2 price="104002"></flat2>
	<flat3 price="104003"></flat3>
	<flat4 price="104004"></flat4>
</etazh10>
В чём отличия?

Старый 15.09.2011, 22:27
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
У вас XML неверно организован.
Пример сложного конфига и его парсера:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<contents>
	<mainText header="Жилой дом"><![CDATA[Современные квартиры и развитая инфраструктура. <br/><br/>Для просмотра деталей кликните на дом. ]]></mainText>
	<podjezds>
		<podjezd id="1">
			<floor id="1">
				<flat id="1" price="810001">Описание 1 квартиры 1 этажа 1 подъезда</flat>
				<flat id="2" price="65654">Описание 2 квартиры 1 этажа 1 подъезда</flat>
				<flat id="3" price="54654654">Описание 3 квартиры 1 этажа 1 подъезда</flat>
			</floor>
			<floor id="2">
				<flat id="1" price="54654">Описание 1 квартиры 2 этажа 1 подъезда</flat>
				<flat id="2" price="5654">Описание 2 квартиры 2 этажа 1 подъезда</flat>
				<flat id="3" price="810001">Описание 3 квартиры 2 этажа 1 подъезда</flat>
			</floor>
			<floor id="3">
				<flat id="1" price="810001">Описание 1 квартиры 3 этажа 1 подъезда</flat>
				<flat id="2" price="810001">Описание 2 квартиры 3 этажа 1 подъезда</flat>
				<flat id="3" price="810001">Описание 3 квартиры 3 этажа 1 подъезда</flat>
			</floor>
		</podjezd>
		<podjezd id="2">
			<floor id="1">
				<flat id="1" price="810001">Описание 1 квартиры 1 этажа 2 подъезда</flat>
				<flat id="2" price="810001">Описание 2 квартиры 1 этажа 2 подъезда</flat>
				<flat id="3" price="810001">Описание 3 квартиры 1 этажа 2 подъезда</flat>
			</floor>
			<floor id="2">
				<flat id="1" price="810001">Описание 1 квартиры 2 этажа 2 подъезда</flat>
				<flat id="2" price="222222">Описание 2 квартиры 2 этажа 2 подъезда</flat>
				<flat id="3" price="810001">Описание 3 квартиры 2 этажа 2 подъезда</flat>
			</floor>
			<floor id="3">
				<flat id="1" price="810001">Описание 1 квартиры 3 этажа 2 подъезда</flat>
				<flat id="2" price="810001">Описание 2 квартиры 3 этажа 2 подъезда</flat>
				<flat id="3" price="810001">Описание 3 квартиры 3 этажа 2 подъезда</flat>
			</floor>
		</podjezd>	
	</podjezds>
</contents>
Код AS1/AS2:
var xmlData:XML = new XML();
xmlData.ignoreWhite = true ;
xmlData.onLoad = loadXML;
xmlData.load('config.xml');
 
var house:Array = new Array(); //сюда будем загонять извлеченные из конфига даные
var mTextHeader:String ;
var mTextContent:String ;
 
function loadXML(success:Boolean)
{
	if (success)
	{
		var mainNode:XMLNode = this.firstChild ;
		mTextHeader = mainNode.firstChild.attributes['header']; //получили значение атрибута header узла <mainText>
		mTextContent = mainNode.firstChild.firstChild.nodeValue ;//получили значение CDATA узла <mainText>
 
		var amountPodjezds:Number = mainNode.childNodes[1].childNodes.length ; //количесвто подъездов, mainNode.childNodes[1] - это узел <podjezds> 
 
		for (i = 0; i < amountPodjezds; i++)
		{
			//Предполагая, что номера (id) подъездов в атрибуте id узлов <floor>
			//могут "плавать", то есть быть перепутаны в конфиге или начинаться
			//например, не с 1, вводим собственную нумерацию для
			//дальнейшего использования в коде
			var idPod:Number = Number(mainNode.childNodes[1].childNodes[i].attributes['id']);
			house[idPod] = new Array();  //массив, где содержится вся инфа подъезда
			house[idPod]['floors'] = new Array(); //создаем массивы для работы с этажами подъезда (то есть уже массивы 3 уровня)
 
			var amountFloors:Number = mainNode.childNodes[1].childNodes[i].childNodes.length ;//количесвто этажей в подъезде
 
			for (j = 0; j < amountFloors; j++)
			{
				//Проворачиваем аналогично для id этажей
				var idFloor:Number = Number(mainNode.childNodes[1].childNodes[i].childNodes[j].attributes['id']);
				house[idPod]['floors'][idFloor] = new Array(); //массив, где содержится вся инфа этажа
				house[idPod]['floors'][idFloor]['flats'] = new Array();//создаем массивы для работы с квартирами этажа (то есть уже массивы 5 уровня)
 
				var amountFlats:Number = mainNode.childNodes[1].childNodes[i].childNodes[j].childNodes.length ;//количесвто квартир на этаже
 
				for (k = 0; k < amountFlats; k++)
				{				
					var idFlat:Number = Number(mainNode.childNodes[1].childNodes[i].childNodes[j].childNodes[k].attributes['id']);
					house[idPod]['floors'][idFloor]['flats'][idFlat] = new Array(); //массив, где содержится вся инфа квартиры
 
					house[idPod]['floors'][idFloor]['flats'][idFlat]['price'] = Number(mainNode.childNodes[1].childNodes[i].childNodes[j].childNodes[k].attributes['price']);
					house[idPod]['floors'][idFloor]['flats'][idFlat]['decsr'] = mainNode.childNodes[1].childNodes[i].childNodes[j].childNodes[k].firstChild.toString() ; //описание квартиры
					trace(house[idPod]['floors'][idFloor]['flats'][idFlat]['decsr'])
				}
			}
		}
 
		nextActions();
 
	}
	else
	{
		tPercent.text = 'Ошибка связи\nс конфигуратором данных xml';
	}
}
 
function nextActions()
{	
	trace('=================')
	trace(mTextContent);
	trace('=================')
	trace('Описание:  ' + house[2]['floors'][2]['flats'][2]['decsr']) //Описание 2 квартиры 2 этажа 2 подъезда
	trace('Цена:  ' + house[2]['floors'][2]['flats'][2]['price']) //Цена 2 квартиры 2 этажа 2 подъезда
}
Создайте config.xml, скомпилируйте код, посмотрите.

Замечание. По сути, такое подход многим покажется избыточным - создание сложной структуры вложенных массивов для хранения данных, в то время как экземпляр полученного XML уже является сложным массивом.
Но для удобства последующего обращения к данным я, например, делаю именно так.
__________________
Идите первым!


Последний раз редактировалось mooncar; 16.09.2011 в 11:41.
Старый 16.09.2011, 14:36
SiFF вне форума Посмотреть профиль Отправить личное сообщение для SiFF Найти все сообщения от SiFF
  № 3  
Ответить с цитированием
SiFF

Регистрация: Apr 2007
Сообщений: 57
mooncar, спасибо тебе огромное. Честно говоря я тоже сторонник большего количества самих файлов, но в упрощенной форме. Так можно оптимизировать и ускорить работу ролика. Да и в PHP так же. Просто в текущем заказе ну никак не избежать, поэтому ты меня очень выручил. Ещё раз спасибо

Старый 16.09.2011, 21:48
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Пожалуйста.
Цитата:
Сообщение от SiFF Посмотреть сообщение
mooncarя тоже сторонник большего количества самих файлов, но в упрощенной форме. Так можно оптимизировать и ускорить работу ролика. Да и в PHP так же. Просто в текущем заказе ну никак не избежать, поэтому ты меня очень выручил.
Вроде я о большом количестве файлов нигде не говорил.
Один большой конфиг, мне кажется, проще и легче использовать, чем набор маленьких (как минимум это снижает количество запросов браузера к серверу).
__________________
Идите первым!

Старый 17.09.2011, 19:11
SiFF вне форума Посмотреть профиль Отправить личное сообщение для SiFF Найти все сообщения от SiFF
  № 5  
Ответить с цитированием
SiFF

Регистрация: Apr 2007
Сообщений: 57
Цитата:
Сообщение от mooncar Посмотреть сообщение
Пожалуйста.

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

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

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

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


 


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


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