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

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

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

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
По умолчанию Извлечение значения из XML

Здравствуйте уважаемые.
Вопрос в следующем. Есть метод в задачи которого входит получать из xml значение по имени параметра(или атрибута) возвращать его в выбранном виде(String, int, XML, и т.п.).
Код AS3:
public function getValue(_nameProperty:String, _property:XML = null, _itsLabel:Boolean = false, _typeReturn:int = T_XML):*
		{
			if (_property == null)
			{
				_property = dProperty; // если список свойств в XML отсутствует используем значения по умолчанию
			}
 
			var dProp:XML;
			if (_property.@id) // если есть id значит это объект, ищем его список свойств в значениях по умолчанию
			{
				dProp = getObject(dProperty.@id);
			}
			//Проверяем последовательно свойство, атрибут, свойство по умолчанию, атрибут по умолчанию пока не найдем значение
			var res:* = _property[_nameProperty][0];
			if (!res) 
			{
				res = _property.@[_nameProperty][0];
				if (!res && dProp)
				{
					res = dProp[_nameProperty][0];
					if (!res)
					{
						res = dProp.@[_nameProperty][0];
					}
				}
			}
                                  //Свойства он определяет как undefined. Если бы res был определен как определенный тип то получил бы значение.
			switch (_typeReturn)
			{
				case T_INT:
					res = res as int;
					break;
				case T_BOOLEAN:
					var s:String = res as String;
					res = (s.toLowerCase() == "true");
					break;
				case T_NUMBER:
					res = res as Number;
					break;
				case T_STRING:
					res = res as String;
				case T_XML:
					res = res;
					break;
				default:
					throw Error ('Ошибка преобразования типов при получения свойства.');
					return null;
					break;
			}
			trace (res); // на выходе undefined
			return res;
		}
К сожалению то что работает в других языках во флэше у меня не прокатило. Посоветуйте в чем ошибка и как ее побороть. По тексту кода постарался наследить комментариями

Добавлено через 1 час 20 минут
Пока придумал только один вариант. res делаю не "*", а "String" и далее из строки делаю преобразования в нужный тип. может кто подскажет другой способ?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ


Последний раз редактировалось SunShadow; 18.11.2008 в 13:06.
Старый 18.11.2008, 20:05
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
я бы сделал несколько методов getStringValue, getBoolBalue, getIntValue..

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

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Цитата:
Сообщение от silin Посмотреть сообщение
я бы сделал несколько методов getStringValue, getBoolBalue, getIntValue..
Идея была в том чтобы сделать модульную систему. Ввиду того, что изначально не известно какие параметры в какой модуль надо будет передавать и к какому типу они будут относиться пытаюсь сделать метод который будет возвращать результат. А дальше на усмотрение разработчика модуля, хочет получает из метода значение в нужном виде, хочет пусть преобразует в местах получения
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 19.11.2008, 16:21
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
а вот так попробуй
Код AS3:
switch (_typeReturn)
{
	case T_INT:
		return parseInt(res);
	case T_BOOLEAN:
		var s:String = res.toString();
		return (s.toLowerCase() == "true");
	case T_NUMBER:
		return parseFloat(res);
	case T_STRING:
		return res.toString();
	case T_XML:
		return new XML(res);
	default:
		throw Error ('Ошибка преобразования типов при получения свойства.');
		return null;
}

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

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Цитата:
Сообщение от silin Посмотреть сообщение
а вот так попробуй
Собственно так и сделал только через as
Код AS3:
var ret:*;
			switch (_typeReturn)
			{
				case T_INT:
					ret = res as int;
					break;
				case T_BOOLEAN:
					var s:String = res as String;
					ret = (s.toLowerCase() == "true");
					break;
				case T_NUMBER:
					ret = res as Number;
					break;
				case T_STRING:
					ret = res as String;
				case T_XML:
					ret = new XML(res);
					break;
				default:
					throw Error ('Ошибка преобразования типов при получения свойства.');
					return null;
					break;
			}
			return ret
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

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

Регистрация: Sep 2002
Сообщений: 30,787
SunShadow, оператор «as» не занимается преобразованием типов. А в таком варианте ваш switch никакого смысловой нагрузки не несет.

Старый 19.11.2008, 23:44
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
через as в этом контексте надо понимать буквально: через ж по нашему

Старый 19.11.2008, 23:50
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 8  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Цитата:
Сообщение от __etc Посмотреть сообщение
SunShadow, оператор «as» не занимается преобразованием типов. А в таком варианте ваш switch никакого смысловой нагрузки не несет.
я пользовался информацией с форума
http://flasher.ru/forum/showpost.php...1&postcount=87
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

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

Регистрация: Sep 2002
Сообщений: 30,787
SunShadow, не путайте каст и конвертацию.

Старый 20.11.2008, 06:16
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 10  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Код AS3:
var o:Object = {};
 
trace(o as String);  //null
trace(String(o));    //object
__________________
тонкий тролль, осеянный благодатью

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

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

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


 


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


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