KoDeserializer
Vous trouverez ici : kodeserializer.zip un petit Deserializer perso à utiliser avec PixLib et qui ajoute deux petites fonctionnalités au XMLToObjectDeserializer fournit par Francis :
Une propriété statique USE_ATTRIBUTE_NAME qui est un Boolean (false par défaut). Il désactive l'utilisation de l'attribut name d'un noeud en tant que nom de propriété de l'objet déserialisé (du coup c'est le nom du noeud qui est utilisé
Une méthode d'instance
forceType( sNodeName : String, sType : String);
Elle permet d'indiquer un type pour des noms. Le but étant de pouvoir gérer des types sur des XML sur lesquels on a pas la main.
Une classe et un xml de test sont dans le zip mais en gros voici le principe :
Mon XML
<?xml version="1.0" encoding="UTF-8"?> <root> <test1NodeName name="test1AttributeName">Cool</test1NodeName> <test2>'item1','item2','item3'</test2> </root>
Si je le charge avec le Deserialize de base voici en gros ce que j'aurais :
[ Object] test1AttributeName : "cool" // Type String test2 : "'item1','item2','item3'" // Type String
Avec mon déserializer, en forcant le type du noeud test2 sur array :
[Object] test1NodeName : "cool" // Type String test2 : [Array] // Type Array [0] : "item1" [1] : "item2" [2] : "item3"
Et voici le bout de code dans la classe Test.as, au passage vous noterez que j'ai mis les types en propriétés statiques pour plus de sécurité...
// Méthode classique var xto : XMLToObject = new XMLToObject( {} ); xto.addEventListener( XMLToObject.onLoadInitEVENT, this, debugObject ); xto.load( "test.xml" ); // Flapflap Style <img src='http://kilooctet.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> KoXTODeserializer.USE_ATTRIBUTE_NAME = false; // On utilise plus l'attribut name var deserializer : KoXTODeserializer = new KoXTODeserializer(); deserializer.forceType("test2", KoXTODeserializer.ARRAY_TYPE); // ON force le type Array pour le noeud test2 var koXto : XMLToObject = new XMLToObject( {}, deserializer ); koXto.addEventListener( XMLToObject.onLoadInitEVENT, this, debugObject ); koXto.load( "test.xml" );
Deux limitations : On force un type pour un nom de noeud donc si on a plusieurs noeud a différents niveaux ayant le même nom ils auront le même type Forcer le type array sur un noeud ayant des enfants n'est pas gérer
J'attends vos retour ![]()
Franchement.. vu la lenteur du parseur XML .. je continue à penser que le XML en AS2 pour des fichiers de config c’est pas top un brin
Vive EDEN ou JSON .. beaucoup mieux adapter à ce genre d’opération.
eKA+
Bien sympa tout ça.
Merci pour le partage.