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

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

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

Регистрация: Feb 2008
Сообщений: 890
По умолчанию Как в одну строчку кода сделать xml-рыбу?

Есть экземпляр класса XML без потомков, но с атрибутами, например такой:
<item id="12345" name="qwerty" />

Как из него сделать рыбу в одну строчку кода?
<item id="" name=""/>

В одну строчку никак?)))

Это все нужно для того, чтобы провести минимальную верификацию структуры данных на то, что все данные в xml-листе одного типа (в примере item), имеют одинаковое число атрибутов, и эти атрибуты имеют одинаковые имена.
Т.е. решение мне видится так, что все элементы xml-листа приводятся к рыбе, а затем сравниваются с какой-то проверочной рыбой (или просто с рыбой первого элемента в листе) через метод toXMLString( ). Т.е., если все элементы имеют одинаковую структуру, то и рыбы у них одинаковые. Конкретно "сделать рыбу в одну строчку" - это чисто из спортивного интереса)))

А вы как бы решали проблему верификации структуры данных в xml-листе?
__________________
скриптограф


Последний раз редактировалось orcpochta; 29.05.2010 в 13:00.
Старый 29.05.2010, 15:22
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Что именно надо верифицировать?)) Что у всех item есть id и name?
Код AS3:
var list:XMLList = xml..item;
var count:uint = list.length();
if (list..@id.length() == count && list..@name.length() == count)
{
    trace("verified");
}
Вобщем зависит от того, какой глубины и точности верификацию надо. На то, чтобы "все было", на то, чтобы "не было лишнего".. М?

Добавлено через 11 минут
Рыба в одну строчку
Код AS3:
trace(xml.toString().replace(/="[^"]*"/g, '=""'));
__________________
Reality.getBounds(this);

Старый 29.05.2010, 15:38
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS3:
var xml : XML =
<nodes>
	<item a="12345"/>
	<item a="34567" b="qwerty"/>
</nodes>;
if (xml.(valueOf().item.(@*.length() == 2 && 
	valueOf().@a && valueOf().@b).length() == valueOf().item.length()))
{
	trace("passed");
}
Но делать в одну строчку не практично.
__________________
Hell is the possibility of sanity

Старый 29.05.2010, 15:43
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 4  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Не, что касается не рыбы, а верификации вообще, то надо сделать проверку, чтобы все элементы в листе имели однородную структуру, т.е. имели один и тот же тип (имя) (мы его не знаем и не должны знать, но в примере это item ), и одинаковый набор атрибутов (одинаковое кол-во и имена) - опять же без какой-либо конкретики,типа id и name, - просто однородность структуры данных должна быть.
Детей рассматривать не надо, т.к. это уже не имеет отношения конкретно к рассматриваемым нами данным. Вот с этой точки зрения, чтобы проверить однородность xml-листа, надо сравнить рыбы от всех его элементов, т.е. сравнить с рыбой первого элемента рыбы всех остальных.

Добавлено через 3 минуты
вот мое кондовое решение))) и рыба не в одну строчку))))

Код AS3:
private function checkDataProviderStructure (dataProvider:XMLList):Boolean
		{
			var xmlList:XMLList = new XMLList(dataProvider);
			var fishStr:String = getXMLFish(xmlList[0]).toXMLString( );
 
			for each (var xml:XML in xmlList)
			{
				if (getXMLFish(xml).toXMLString( ) != fishStr) return false;
			}
 
			return true;
		}
 
		private function getXMLFish (xml:XML):XML
		{
			var fish:XML = new XML(xml);
 
			for (var i:uint = fish.@ * .length( ); i--; )
			{
				fish.@ * [i] = "";
			}
 
			return fish;
		}
нигде по конкретным именам не обращаюсь))
__________________
скриптограф


Последний раз редактировалось orcpochta; 29.05.2010 в 15:57.
Старый 29.05.2010, 15:59
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 5  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
А если атрибуты местами поменять?

Старый 29.05.2010, 16:00
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
var verify:Boolean = true;
var l2:XMLList = xml.children();
var fish:String = l2[0].toXMLString().replace(/="[^"]*"/g, '=""');
for (var i:uint = 1; i < l2.length(); i++)
{
	if (l2[i].toXMLString().replace(/="[^"]*"/g, '=""') != fish)
	{
		verify = false;
		break;
	}
}
trace(verify);
__________________
Reality.getBounds(this);

Старый 29.05.2010, 16:02
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 7  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Код:
/=".*?"/g
Можно так еще.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
udaaff))))
А если ошибка в первенце)))
Тут все вилами на воде...
__________________
Reality.getBounds(this);

Старый 29.05.2010, 16:04
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 9  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Цитата:
Сообщение от udaaff Посмотреть сообщение
А если атрибуты местами поменять?
можно считать, что размер порядок имеет значение)))
иначе нам просто не организовать структуру, которая не была бы привязана к каким-то конкретным именам

Добавлено через 2 минуты
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Рыба в одну строчку
Код AS3:
trace(xml.toString().replace(/="[^"]*"/g, '=""'));
круто! только там надо не toString, а toXMLString
и я нихрена не понял, что происходит в скобках replace)))))
это надо регулярные выражения почитать, или что это?
__________________
скриптограф


Последний раз редактировалось orcpochta; 29.05.2010 в 16:10.
Старый 29.05.2010, 16:11
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Да, регулярные выражения.
Ищем =", потом любые символы кроме ", потом "
Когда такая последовательность найдена, она заменяется на =""
Можно и toXMLString(), я не против)))
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 29.05.2010 в 16:15.
Создать новую тему Ответ Часовой пояс GMT +4, время: 13:18.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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