Flex ActionScript – Ecriture et édition d'objets XML
Vous pouvez écrire et modifier des objets XML en utilisant ActionScript. Il y a trois choses que vous pouvez faire:
- Modifier de la donnée existante
- Ajouter de nouvelles données
- Supprimer de la donnée existante
Vous pouvez modifier de la donnée existante en utilisant la même syntaxe E4X utilisée pour la lecture. Par exemple, le code suivant change le title du premier livre:
xml.book[0].title = "Premier Livre, Premier Tome";
L'exemple suivant change le nom du second author du premier book:
xml.book[0].authors.author[1].@first = "Joseph";
Tous les exemples se basent sur ce fichier XML:
var xml:XML = <books> <book> <title>Premier Livre</title> <authors> <author first="Henri" last="Smith"/> <author first="Bill" last="Wesson"/> </authors> </book> <book> <title>Second Livre</title> <authors> <author first="John" last="Stone"/> <author first="Sven" last="Ericsson"/> <author first="Bob" last="Dallas"/> </authors> </book> </books>
Si vous voulez ajouter de la nouvelle donnée, vous pouvez utiliser les méthodes appendChild(), prependChild(), insertChildBefore() et insertChildAfter(). Chaque méthode insère un nouveau nœud XML dans une structure XML ou XMLList. Les méthodes appendChild() et prependChild() accèptent un paramètre et insèrent le nœud à la fin et au début de la structure, respectivement. L'exemple suivant ajoute un nouveau nœud publisher à chaque book:
xml.book[0].appendChild(<publisher>PubliEdition</publisher>); xml.book[1].appendChild(<publisher>NouveauxEditeurs</publisher>);
Vous pouvez utiliser les méthodes insertChildBefore() et insertChildAfter() pour ajouter un nœud avant ou après un nœud existant. Chaque méthode requiert 2 paramètres: le nouveau node à ajouter et une référence à un nœud existant.
Le code suivant ajoute un noeud publicationDate entre les authors et les nœuds publisher d'un book:
xml.book[0].insertChildAfter(xml.book[0].authors, <publicationDate>2006<publicationDate>); xml.book[1].insertChildAfter(xml.book[1].authors, <publicationDate>2007<publicationDate>);
Vous pouvez supprimer un élément en utilisant l'opérateur delete. L'exemple suivant ajoute un nouvel attribut middle à un nœud author puis le supprime:
xml.book[0].authors.author[1] = <author first="Henri" middle="Andy" last="Smith"/>; trace (xml.book[0].authors); delete xml.book[0].authors.author[1].@middle; trace (xml.book[0].authors);
Articles similaires
- Flex ActionScript – Création d'objets XML en ActionScript 3
- Flex ActionScript – Lecture de données XML en ActionScript 3
- Flex Item Renderer – Utiliser des States dans un itemRenderer
- Flex Tips – Remplir un Model à partir d'un fichier de configuration XML automatiquement
- Flex Item Renderer – Communiquer avec un itemRenderer grâce à des Event
Aucun trackbacks pour l'instant






7 avril 2009
Salut !
Merci pour ce tuto, mais j'aimerais savoir une chose : Est-il possible d'enregistrer le fichier XML ?
Je veux dire : je charge le XML dans la variable xml, ensuite je fais
et puis je voudrais que le fichier .xml que j'ai chargé au début soit modifié. (qu'il ne soit plus comme à l'origine si je l'ouvre avec le bloc note par exemple)
Merci
7 avril 2009
Salut,
tu ne peux écrire sur le disque qu'avec Flash Player 10. Il faut utiliser la méthode save() de FileReference:
http://livedocs.adobe.com/flex/3/langref/flash/net/FileReference.html#save()
Tu lui passes la data et voila
Fabien
7 avril 2009
Waaa !
Réponse ultra rapide ! Merci
C'est dommage, j'aurais voulu écrire avec flash player 6. Tant pis
Merci
14 avril 2009
Bonjour,
J'aurais une question concernant cette méthode mais mon problème est plus global je pense.
Quand je dois récupérer les données par l'E4X sur mes "énormes fichiers", je me retrouve avec un Error #1502 qui me dit qu'au bout de 15 seconde si mon traitement n'est pas fini, c'est qu'il y a un problème. Cependant mes traitements se déroulent bien mais se stoppent au bout du scriptTimeLimit que j'ai déja mis à 60secondes le maximum autorisé par Flex. Savez comment faire pour finir mes traitement sans que Flex ne détecte ça comme une erreur?
14 avril 2009
Bonjour,
Pour éviter l'erreur, il faut que vous sépariez votre tâche en sous-tâches. Vous pouvez par exemple extraire une boucle (boucle for par ex.) de votre fonction de traitement pour en faire une fonction à part que vous appellerez par "petits bouts", c'est a dire par tranches de X éléments par exemple. Vous pouvez aussi mettre cela dans un "pseudo-thread" (Flash Player n'a qu'un seul thread, il faut donc feinter). Pour cela, voyez cette classe :
http://blogs.adobe.com/aharui/2008/01/threads_in_actionscript_3.html
Vous pouvez aussi essayer d'optimiser votre traitement e4x (voir les conseils d'optimisation AS3 généraux) et éviter les instructions trace() qui ralentissent le traitment:
http://www.flex-tutorial.fr/2009/01/06/flex-actionscript-optimiser-votre-code-as3/
Fabien
15 avril 2009
Merci beaucoup pour ces conseils, quand je lis comment améliorer le code, effectivement j'ai pas tout fait dans les règles de l'art.
25 juin 2009
Et pour ajouter un attribut a un noeud existant, it's possible ? ^^
27 juin 2009
Yes it is!
Soit avec de l'e4x comme ceci:
xml.book[0].title.@newAttr = "Valeur nouvel attribut du node title";
Sinon il y a d'autres méthodes sur la classe XML pour les manipuler, direction la doc:
http://livedocs.adobe.com/flex/3/langref/XML.html
Fabien