Classe XmlArray
Code :
public function XmlArray(xmlstr:String) {
if (xmlstr != undefined) {
var xml = new XML(xmlstr);
parse(xml.firstChild);
}
}
public function load(url:String) {
var xml = new XML();
xml.ignoreWhite = true;
xml.target = this;
xml.onLoad = function(success) {
if (success) {
this.target.parse(this.firstChild);
}
this.target.onLoad(success);
};
xml.load(url);
}
public var onLoad:Function; //un EventDispatcher serait p-e plus approprié
public function hasChild():Boolean {
return (this.length>0);
}
// Retourne une chaine sous forme xml représentant le tableau
public function toString():String {
if (this.nodeName == undefined) {
return undefined;
}
var str = "<"+this.nodeName;
for (var att in this.attributes) {
str += " "+att+"=\""+this.attributes[att]+"\"";
}
if (!this.hasChild() && this.data == undefined) {
return str+" />";
}
str += ">";
for (var i = 0; i<this.length; i++) {
str += this[i].toString();
}
if (this.data != undefined) {
if (this.data.indexOf("<")>=0 || this.data.indexOf(">")>=0) {
str += "<![CDATA["+this.data+"] ]>";
} else {
str += this.data;
}
}
return str+"</"+this.nodeName+">";
}
private function parse(node:XMLNode) {
this.nodeName = node.nodeName;
for (var att in node.attributes) {
if (this.attributes == undefined) {
this.attributes = new Object();
}
this.attributes[att] = node.attributes[att];
}
for (var i = 0; i<node.childNodes.length; i++) {
if (node.childNodes[i].nodeName != undefined) {
this.push(new XmlArray(node.childNodes[i].toString()));
} else {
this.data = node.childNodes[i].nodeValue;
}
}
}
}
Son utilisation est plutôt simple :
Code :
trace(xmlarr[0].attributes.unAttribu); //Sortie "uneVal"
trace(xmlarr[1].data); //Sortie "texte"
trace(xmlarr[2].data); //Sortie "du texte avec des < et des >"
//ajout d'un noeud enfant au noeud 0
xmlarr[0].push(new XmlArray("<noeudEnfant />"));
Voilà, si vous avez des question, remarques, suggestion, n'hésitez pas à m'en faire part .
Par SamsamTS :: jeudi 18 novembre 2004 à 14:37 :: Old :: rss
Vos commentaires
Le jeudi 18 novembre 2004 à 17:17 , commentaire par sebby :: #
tu peux mettre plusieurs niveaux de profondeurs dans ton fichier xml ?
Le jeudi 18 novembre 2004 à 17:43 , commentaire par SamsamTS :: #
Biensur
Le vendredi 19 novembre 2004 à 08:42 , commentaire par ekameleon :: #
Hello
Au niveau de ton xml.onLoad pour que cela soit + propre tu devrais utiliser la classe mx.utils.Delegate à mon avis :
Au début de ta classe :
Code :
import mx.utils.Delegate
dans ta méthode load :
Code :
private var _xml:XML ;
public function load(url:String) {
var _xml = new XML();
_xml.ignoreWhite = true;
_xml.onLoad = Delegate.create (this, _isLoad) ;
xml.load(url) ;
}
private function _isLoad (bool:Boolean) :Void {
if (bool) parse (_xml.firstChild) ;
// ici tu dispatch ton événement
} ;
Voilà en gros
bye
Le vendredi 19 novembre 2004 à 09:14 , commentaire par Yaya :: #
Salut SamsamTS,
ce qui aurait ete sympa ^_^, aurait ete de mettre un pti exemple pour les novices comme moi... (associé as+exemple visuel .... quel bonheur )
Yaya
Le vendredi 19 novembre 2004 à 13:48 , commentaire par SamsamTS :: #
eka > tu as sans doute raison je vais faire ca
Yaya > voici la strucyure que l'on obtient avec l'exemple ci-dessus :
- Avant le push :
Code :
Variable _level0.xmlarr = [object #4] [
0:[object #5] [
nodeName:"unNoeud",
attributes:[object #6, class 'Object'] {
unAttribu:"uneVal"
}
],
1:[object #7] [
nodeName:"autreNoeud",
data:"texte"
],
2:[object #8] [
nodeName:"encoreUn",
data:"du texte avec des < et des >"
],
nodeName:"rootNode"
]
- Après le push :
Code :
Variable _level0.xmlarr = [object #4] [
0:[object #5] [
0:[object #6] [
nodeName:"noeudEnfant"
],
nodeName:"unNoeud",
attributes:[object #7, class 'Object'] {
unAttribu:"uneVal"
}
],
1:[object #8] [
nodeName:"autreNoeud",
data:"texte"
],
2:[object #9] [
nodeName:"encoreUn",
data:"du texte avec des < et des >"
],
nodeName:"rootNode"
]
Le vendredi 19 novembre 2004 à 15:47 , commentaire par ekameleon :: #
Tu as du voir que je suis allé beaucoup trop vite au dessus, je me corrige pour ceux qui l'auraient pas vu
Code :
private var _xml:XML ;
public function load(url:String) {
_xml = new XML();
_xml.ignoreWhite = true;
_xml.onLoad = Delegate.create (this, _isLoad) ;
_xml.load(url) ;
}
bye
Le samedi 20 novembre 2004 à 09:23 , commentaire par Yaya :: #
Yaya
Le jeudi 21 avril 2005 à 11:03 , commentaire par UrukHai :: email :: #
Salut,
sympa cette classe, ça tombe bien j'en cherchais une comme ça pour l'implémenter avec la classe As2 que je viens de faire XMLManager.
Mon avis et qu'il faudrait mieux séparer le chargement d'un XML et sa transformation en Array, pour permettre un totale liberté du fichier XML.
Par contre je ne connaissais pas cette classe Delegate, je vais plus m'y pencher, merci encore pour l'info.
Le lundi 2 mai 2005 à 23:05 , commentaire par SamsamTS :: #
Tu peux reprendre mon code si tu veux, mais n'oublie pas de me montrer le résultat de la "fusion"
Le mardi 3 mai 2005 à 16:47 , commentaire par mike :: #
Super pratique ca, merci
Le lundi 6 juin 2005 à 10:36 , commentaire par [ NikO ] :: #
Le mercredi 28 septembre 2005 à 10:24 , commentaire par cousine :: email :: #
salut cousin, moi j'y comprends rien a tout ça mais c'est une bonne idée ce site, encore une fois tu m'épates
a +, élise.
Le dimanche 3 février 2008 à 14:18 , commentaire par photo :: #
Merci pour le détail de cette classe.