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

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

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

Регистрация: May 2007
Адрес: Saint-Petersburg
Сообщений: 136
Отправить сообщение для progman с помощью ICQ
По умолчанию как такой хмл распарсить

от виндового проекта достались настроки и параметры игры в хмлках такого вида:
Код:
<?xml version="1.0" encoding="unicode" ?>
<root>
	<object name="Params">
     		<object name="SITE">
			
                  <integer name="x" value="96"/>
                  <integer name="y" value="15"/>

                  <integer name="width" value="53"/>
                  <integer name="height" value="35"/>

                  <!-- ВЛАДЕЛЕЦ-->
                  <integer name="master" value="0"/>

                  <string name = "Terrain" value = "XML\Terrain888.xml"/>

                  <object name="INFRASTRUCTURE">
                    <boolean name="footway" value="true"/>
                    <boolean name="highway" value="true"/>
                  </object>
				  
		 </object>   <!-- SITE -->
    </object>   <!-- Params -->
</root>
под масдаем был самописный парсер который мог работать легко и непринужденно с таким форматом дергая величины параметров по тэгу 'name', а как в флеше быть?

PS переписать все настройки под более удобный флешу формат возможности не представляется к сожалению (((
__________________
fast restart: *((int*)0) = 0;

Старый 14.09.2009, 22:20
CrazyCoder вне форума Посмотреть профиль Отправить личное сообщение для CrazyCoder Найти все сообщения от CrazyCoder
  № 2  
Ответить с цитированием
CrazyCoder

Регистрация: Aug 2008
Сообщений: 15
Код AS3:
var mXML:XML = 
	<root>
		<object name="Params">
			<object name="SITE">
 
				  <integer name="x" value="96"/>
				  <integer name="y" value="15"/>
 
				  <integer name="width" value="53"/>
				  <integer name="height" value="35"/>
 
				  <integer name="master" value="0"/>
 
				  <string name = "Terrain" value = "XML\Terrain888.xml"/>
 
				  <object name="INFRASTRUCTURE">
				<boolean name="footway" value="true"/>
				<boolean name="highway" value="true"/>
			  </object>
 
		 </object>
	</object>
</root>
 
// var w:int = xml.child("root").child("Params").child("SITE").width
var w:int = mXML.object.(@name == "Params").object.(@name == "SITE").integer.(@name == "width").@value;
trace(w);

Старый 15.09.2009, 04:05
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 3  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Код AS3:
var xml:XML = 
<root>
	<object name="Params">
		<object name="SITE">
			<integer name="x" value="96"/>
			<integer name="y" value="15"/>
			<integer name="width" value="53"/>
			<integer name="height" value="35"/>
			<integer name="master" value="0"/>
			<string name = "Terrain" value = "XML\Terrain888.xml"/>
			<object name="INFRASTRUCTURE">
				<boolean name="footway" value="true"/>
				<boolean name="highway" value="true"/>
			</object>
		</object>
	</object>
</root>
 
function getValueByName(attrName:String, dataXML:XML):String
{
	var nodeValue:String = dataXML..*.(@name == attrName).@value.toString();
 
	return nodeValue || "... а нету такого value у требуемого узла :)";
}
 
trace( "Params = " + getValueByName("Params", xml) );
trace( "footway = " + getValueByName("footway", xml) );
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 15.09.2009 в 04:32.
Старый 15.09.2009, 04:30
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Как бы тяжело найти более удобный формат для флеша чем XML быстрее читать AMF, но его писать сложно вне Флеша... а так, флеш очень шусто XML парсит / читает, ну, по крайней мере быстрее чем Яваскрипт, даже в V8.
__________________
Hell is the possibility of sanity

Старый 15.09.2009, 12:34
progman вне форума Посмотреть профиль Отправить личное сообщение для progman Найти все сообщения от progman
  № 5  
Ответить с цитированием
progman
 
Аватар для progman

Регистрация: May 2007
Адрес: Saint-Petersburg
Сообщений: 136
Отправить сообщение для progman с помощью ICQ
а если будет так:
Код:
<?xml version="1.0" encoding="unicode" ?>
<root>
	<object name="Params">
     		<object name="SITE">
			
                  <integer name="x" value="96"/>
                  <integer name="y" value="15"/>

                  <integer name="width" value="53"/>
                  <integer name="height" value="35"/>
                			  
		 </object>   <!-- SITE -->

                  <object name="SITE">
			
                  <integer name="x" value="2"/>
                  <integer name="y" value="2"/>

                  <integer name="width" value="53"/>
                  <integer name="height" value="35"/>

                  				  
		 </object>   <!-- SITE -->
                  <object name="SITE">
			
                  <integer name="x" value="2"/>
                  <integer name="y" value="37"/>

                  <integer name="width" value="53"/>
                  <integer name="height" value="35"/>

                  				  
		 </object>   <!-- SITE -->
    
    </object>   <!-- Params -->
</root>
как её модифицировать?
Код:
function getValueByName(attrName:String, dataXML:XML):String
{
	var nodeValue:String = dataXML..*.(@name == attrName).@value.toString();
 
	return nodeValue || "... а нету такого value у требуемого узла :)";
}
 
trace( "Params = " + getValueByName("Params", xml) );
trace( "footway = " + getValueByName("footway", xml) );
__________________
fast restart: *((int*)0) = 0;


Последний раз редактировалось progman; 15.09.2009 в 12:37.
Старый 15.09.2009, 12:38
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 6  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
а с чем у вас конкретно проблема. вам дали решение, объяснили.
или вы хотите, чтобы и код за вас весь написали?
__________________
я могу стать всем, если только захочу

Старый 15.09.2009, 13:11
progman вне форума Посмотреть профиль Отправить личное сообщение для progman Найти все сообщения от progman
  № 7  
Ответить с цитированием
progman
 
Аватар для progman

Регистрация: May 2007
Адрес: Saint-Petersburg
Сообщений: 136
Отправить сообщение для progman с помощью ICQ
Цитата:
Сообщение от Felicast Посмотреть сообщение
а с чем у вас конкретно проблема. вам дали решение, объяснили.
или вы хотите, чтобы и код за вас весь написали?
trace( "footway = " + getValueByName("footway", xml) ); - из какой ноды SITE будет брать параметр ибо их там несколько.
__________________
fast restart: *((int*)0) = 0;

Старый 15.09.2009, 13:18
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 8  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Цитата:
Сообщение от progman Посмотреть сообщение
trace( "footway = " + getValueByName("footway", xml) ); - из какой ноды SITE будет брать параметр ибо их там несколько.
Результатом будет объединение всех значений в одно.

1. Если узлы совсем уж такие будут идентичные и будут одинаковые атрибуты namе, то нужно дополнительно указывать еще и номер узла из которого выбирать value по name.
Код AS3:
function getValueByName(attrName:String, num:int, dataXML:XML):String
{
	var nodeValue:String = dataXML.object.object[num].*.(@name == attrName).@value.toString();
 
	return nodeValue || "... а нету такого value у требуемого узла :)";
}
2. Либо собирать все нужные значения в массив и уже ими потом пользоваться (но это лишние дейтсвия).
3. Либо в процессе обхода дерева сразу присваивать значения нужным элементам.
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 15.09.2009 в 13:32.
Старый 15.09.2009, 13:30
progman вне форума Посмотреть профиль Отправить личное сообщение для progman Найти все сообщения от progman
  № 9  
Ответить с цитированием
progman
 
Аватар для progman

Регистрация: May 2007
Адрес: Saint-Petersburg
Сообщений: 136
Отправить сообщение для progman с помощью ICQ
Mur4ik спасибо.
__________________
fast restart: *((int*)0) = 0;

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

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

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


 


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


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