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 :)


Tags: , ,


4 commentaires ...

» RSS des commentaires
  1. fab /
    -->

    :) Le principe du tuto-petite-histoire me plaît bien !! À refaire !!

  2. piouPiouM /
    -->

    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.

  3. Yoann /
    -->

    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 :)

  4. Yoann /
    -->

    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).


Soit pas timide...

Powered by WP Hashcash


Bad Behavior has blocked 529 access attempts in the last 7 days.