Le xml de flex, en vrac…
Dans la série, un petit pas pour l’homme… un petit pas pour l’homme.
((/blog/images/images.jpeg|foot on moon))
insertChild
on a du xml :
var x : XML =
<books>
<book title="Harry potter et l'ordre de phoenix">
<chapitre nom="HPOPchapitre 1" test="B"/>
<chapitre nom="HPOPchapitre 2" test="B"/>
<chapitre nom="HPOPchapitre 3" test="B"/>
</book>
<book title="Harry Potter et prince de sang mele">
<chapitre nom="HPPSMchapitre 1" test="a"/>
<chapitre nom="HPPSMchapitre 2" test="yoy"/>
<chapitre nom="HPPSMchapitre 3" test="B"/>
</book>
<book title="Harry potter et les reliques de la Mort">
<chapitre nom="HPRMchapitre 1" test="B"/>
<chapitre nom="HPRMchapitre 2" test="B"/>
<chapitre nom="HPRMchapitre 3" test="B"/>
</book>
</books>
on voudrait ajouter un livre:
var book : XML = <book title="StarWars" /> ;
on lit la doc (http://livedocs.adobe.com/labs/flex3/html/help.html?content=13_Working_with_XML_07.html) et on trouve un truc du genre
x = x.insertChildAfter(x.book[0], book);
Et x donne ca :
<books>
<book title="Harry Potter et l'ordre du phoenix">
<chapitre nom="HPOPchapitre 1" test="B"/>
<chapitre nom="HPOPchapitre 2" test="B"/>
<chapitre nom="HPOPchapitre 3" test="B"/>
</book>
<book title="StarWars"/>
<book title="Harry Potter et prince de sang mele">
<chapitre nom="HPPSMchapitre 1" test="a"/>
<chapitre nom="HPPSMchapitre 2" test="yoy"/>
<chapitre nom="HPPSMchapitre 3" test="B"/>
</book>
<book title="Harry potter et les reliques de la Mort">
<chapitre nom="HPRMchapitre 1" test="B"/>
<chapitre nom="HPRMchapitre 2" test="B"/>
<chapitre nom="HPRMchapitre 3" test="B"/>
</book>
</books>
Cool ca marche
Et puis bon on se dit qu’on a bien compris, alors pourquoi pas rajouter un chapitre…
on tente :
var chapitre : XML = <chapitre nom="HPRMchapitre2.5" /> ;
x = x.insertChildAfter(x.book[0].chapitre[1], chapitre);
mais ça marche pas… pourtant on fait tout comme la documentation ???
En fait, pour insérer un noeud xml il faut surtout appeler insertChildAfter sur le noeud parent du noeud qui sera inséré…
var after : XML = x.book[1].chapitre[1];
var after_parent = after.parent();
after_parent = after_parent.insertChildAfter(after,chapitre);
et la ca marche… plutôt bien
<books>
<book title="Harry potter et l'ordre de phoenix">
<chapitre nom="HPOPchapitre 1" test="B"/>
<chapitre nom="HPOPchapitre 2" test="B"/>
<chapitre nom="HPOPchapitre 3" test="B"/>
</book>
<book title="Harry Potter et prince de sang mele">
<chapitre nom="HPPSMchapitre 1" test="a"/>
<chapitre nom="HPPSMchapitre 2" test="yoy"/>
<chapitre nom="HP 2.5"/>
<chapitre nom="HPPSMchapitre 3" test="B"/>
</book>
<book title="Harry potter et les reliques de la Mort">
<chapitre nom="HPRMchapitre 1" test="B"/>
<chapitre nom="HPRMchapitre 2" test="B"/>
<chapitre nom="HPRMchapitre 3" test="B"/>
</book>
</books>
Les requetes
Sur des noeuds XML, on peut faire des requètes rapides à écrire,
Par exemple : Tout les chapitres , à n’importe quelle profondeur
var chap : XMLList = x..chapitre;
On peut compliquer en voulant le chapitre dont le paramètres test vaut yoy… (
var chap : XMLList = x..chapitre.(@test=="yoy");
Sauf que là, ça marche que si tout les noeuds chapitre ont cet attribut test, sinon ca génère un erreur…
Passer du XMLList au XML
Bon ca, c’est plus un pense bête, parce que ce matin, étant pas très réveillé, ca me paraissait super intéressant, beaucoup moins maintenant…
Concernant les requètes, elles sont super pratiques, facile à écrire !
On peux s’en servir pour retrouver un noeud précis dans le xml par exemple, pour utiliser ensuite insertChildAfter. Sauf que insertChildAfter, lui il prend du XML et pas du XMLList.
La solution, pour récupérer du XML, quand on utilise ce genre de requète, c’est d’utiliser les opérateurs [] pour accèder à l’objet XML contenu dans la XMLList.
var chap : XML = x..chapitre.(@test=="yoy")[0];
Voilà j’avais prévenu, c’est pas la découverte du siècle

Français
--> 8 janvier 2008 ( 16:24 )
--> 12 janvier 2008 ( 11:02 )
Flex 3 supporte-t’il XPath pour traverser les structures XML ?
La syntaxe est peut être sympa comme cela, mais lorsque l’on utilise déjà XPath il est dommage de ne pas pouvoir en profiter, amha.
--> 6 avril 2009 ( 11:09 )
Bonjour,
Merci pour le tutos, il est relativement clair seulement étant débutant je ne sais pas trop ou mettre ce code pour le tester. Y’aurait t-il une manière pour « jouer » avec le XML directement avec un ??
Si serait-il possible d’avoir un exemple
Encore merci pour les tutos
--> 6 avril 2009 ( 11:11 )
Ha .. je crois que le site à refusé le morceau de code que j’avais envoyé
au niveau de la deuxième ligne « avec un … ??? » il faut remplacer « … »(le blanc) par un ‘mx : XML id=fichierXML source=monFichier.xml ‘ (j’ai enlevé les chevrons et les double-quotes).