|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Кордум имел в виду такую конструкцию:
Сам пользуюсь сравнением строки, мне "true" и "false" ближе и роднее, чем 1 и 0.
__________________
Reality.getBounds(this); |
|
|||||
Вот мой "велосипед". Название корневого нода уходит в параметр id и наоборот:
package atflash.remote.serializations { import atflash.errors.Logger; /** * Сериализует аттрибуты и вложенности в виде массива * @author rzer * @version 1.01 */ public class CleverXML { public static function serialize(packet:Object):String { try { var xml:XML = objectToXML(packet, packet.id, true); var result:String = xml.toXMLString(); }catch (err:Error) { Logger.error("[CleverXML] Error while serialize object " + err.message); Logger.error(err); } return result; } public static function deserialize(val:String):Object { try { var xml:XML = new XML(val); var obj:Object = objectFromXML(xml, true); } catch (err:Error) { Logger.error("[CleverXML] Error while deserialize xml: " + err.message + " " + val); Logger.error(err); } return obj; } private static function objectFromXML(source:XML, insertId:Boolean = false):Object { if (source.toXMLString() == "") { return null; } var result:Object = parseAttributes(source); if (insertId) { result["id"] = source.name().toString(); } for (var i:int = 0; i < source.children().length(); i++) { var anItem:XML = source.children()[i]; var aName:String; var anArray:Array; if (anItem.nodeKind() == "text") { aName = "text"; result[aName] = String(anItem); }else { aName = anItem.name().toString(); anArray = result[aName]; if (!anArray) { anArray = new Array(); } anArray.push(objectFromXML(anItem)); result[aName] = anArray; } } return result; } private static function objectToXML(source:Object, nodeName:String, ignoreID:Boolean = false):XML { var result:XML = <packet/>; result.setName(nodeName); for (var item:String in source) { var anItem:* = source[item]; switch (typeof(anItem)) { case "boolean": case "string": case "number": { if (!ignoreID || item != "id") { result.@[item] = anItem; } break; } case "object": { if (anItem is Array) { var anArray:Array; anArray = anItem as Array; if (anArray.length > 0) { for (var i:int = 0; i < anArray.length; i++) { result.appendChild(objectToXML(anArray[i], item)); } } else { result.appendChild(objectToXML(anItem as Object, item)); } } else { result.appendChild(objectToXML(anItem as Object, item)); } break; } case "xml": { result.appendChild(anItem); break; } } } return result; } private static function parseAttributes(source:XML):Object { var result:Object = new Object(); var aList:XMLList = source.attributes(); for (var i:int = 0; i < aList.length(); i++) { var anItem:XML = aList[i]; var aName:String = anItem.name().toString(); var anAttribute:String = anItem.toXMLString(); if (String(Number(anAttribute)) == anAttribute) { result[aName] = Number(anAttribute); } else { result[aName] = anAttribute; } } return(result); } } }
__________________
if (love is true) break my.heart; Последний раз редактировалось Rzer; 13.05.2012 в 14:47. |
|
|||||
Регистрация: Mar 2007
Сообщений: 319
|
доступ к свойствам объекта быстрее чем к xml
даже такая ересь как: var s:String = (function(list:XMLList):XML { for each (var node:XML in list) { if (node.@id == 'ru') { return node; } } return null; })(xml.languages.item).@flag; в целом я за строгую типизацию объектов, languages = Vector.<Item>, item = Item, id = Item.#id, flag = Item.#flag и за хранение локализации в отдельных друг от друга xml файлах с одинаковой структурой Последний раз редактировалось Nooob; 16.05.2012 в 06:54. |
|
|||||
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
stweet, а что, String(xml.@atr) может быть строкой "true" и при этом иметь длину 0?
А если в xml будет написано TRUE, то это уже не тру?
__________________
Reality.getBounds(this); |
|
|||||
Modus ponens
|
Цитата:
Цитата:
Но как я уже говорил, пытаться использовать XML в местах критичных к скорости - заниматься ерундой, т.как для каждой задачи существуют лучшие и худшие структуры данных, которые будут работать лучше любого универсального хранилища данных, а XML - даже на универсальное хранилище не потянет (т.е. в сравнении с SQL базами данных, например).
__________________
Hell is the possibility of sanity |
|
|||||
var xml:XML = <windowstyle> <win id="0"> <parameters> <title> <lang name="ru">Окно</lang> <lang name="en">Window</lang> </title> <width>400</width> <height>500</height> <scale>true</scale> </parameters> <next> </next> </win> </windowstyle>; var obj:Object = { 'win': { 'parameters': { 'title': { 'lang': { 'name':'ru' }}}}}; var xt:Number = 0; var t:Number = getTimer(); //trace(xml.win.parameters.title.lang.@name[0]) trace(xml..lang.@name[0]) xt = getTimer(); trace(obj.win.parameters.title.lang.name) trace(xt-t, getTimer() - xt); По скорости... хз, не могу представить себе ситуацию в которой был выбран XML как форма передачи данных, и скорость обработки этих данных была бы неудовлетворительной. По примеру выше я разницы в скорости не нашел. По опыту разбора XML тоже не припомню чтобы я пошел на какие-то извращения из-за скорости доступа к XML... Перефразирую свой первый пост: "Зачем?" |
|
|||||
Цитата:
Бывает, получаю атрибуты такого вида "fasle", "tru", "True", "FALSE" и т.п. или вообще заказчик их попросту не ставит. Мне пришлось прибежать к сие действиям т.к. иногда заказчики попадаются далёкие от xml и постоянно жалуются на то что мои продукты не работают должным образом. На самом деле это только верхушка айсберга =)
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Тогда Вам стоит прислушаться к совету КорДума и использовать 0 и 1 ))))
А проблемы с True и TRUE решаются преобразованием к строчным String#toLowerCase() перед сравнением. Цитата:
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 23:06. |
|
« Предыдущая тема | Следующая тема » |
|
|