Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2996 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  XML et récupération de noeuds suivant un chemin

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

XML et récupération de noeuds suivant un chemin

n°1881181
an3k
powered on macintosh ^^
Posté le 05-05-2009 à 19:37:42  profilanswer
 

Bonjour,

 

Je suis en train de faire une sorte de parseur perso en PHP, mais j'ai des gros problèmes de lenteurs. Voici un exemple de XML :

Code :
  1. <root>
  2.     <section id="sec1">
  3.         <url>section1.xml</url>
  4.         <titre>Titre de section</titre>
  5.         <categorie id="cat1">
  6.             <url>categorie1.xml</url>
  7.             <titre>Titre de cat1gorie</titre>
  8.             <page id="pag1>
  9.                 <url>page.xml</url>
  10.                 <titre>Titre de page</titre>
  11.             </page>
  12.         </categorie>
  13.         <categorie id="cat2">
  14.             <url>categorie2.xml</url>
  15.             <titre>Titre de cat2gorie</titre>
  16.         </categorie>
  17.     </section>
  18.     <section id="sec2">
  19.         <url>section2.xml</url>
  20.         <titre>Titre de s2ction</titre>
  21.         <categorie id="cat1">
  22.             <url>categorie1.xml</url>
  23.             <titre>Titre de cat1gorie</titre>
  24.         </categorie>
  25.         <categorie id="cat2">
  26.             <url>categorie2.xml</url>
  27.             <titre>Titre de cat2gorie</titre>
  28.         </categorie>
  29.     </section>
  30. </root>
 

et prenons par exemple le chemin sec1/cat1/pag1/, je veux obtenir un array qui ressemble à ça :

 
Code :
  1. array (
  2.   0 =>
  3.   array (
  4.     id => sec1,
  5.     url => section1.xml,
  6.     type => section,
  7.     enfant => array(
  8.         id => cat1,
  9.         url => categorie1.xml,
  10.         type => categorie,
  11.         enfant => array(
  12.             id => page1,
  13.             url => page.xml,
  14.             type => page
  15.         )
  16.     )
  17.   )
  18. )
 

J'y arrive avec simpleXML, (pas à le faire avec getElementById() de DOM), en faisant du XPath pour chaque noeud, enfin le truc pas optimisé du tout :/.
Du coup ma question est : est-ce que vous connaissez un moyen de faire ca propre et rapidement ?

 

Merci :)


Message édité par an3k le 05-05-2009 à 19:51:56
mood
Publicité
Posté le 05-05-2009 à 19:37:42  profilanswer
 

n°1881409
guybrush02
Posté le 06-05-2009 à 14:06:55  profilanswer
 

Pourquoi faire une structure en arbre dans des array alors qu'XML est nativement une structure en arbre ? Ton array, par ailleurs, mélange attributs et éléments.  
 
DOM est sans doute le plus adapté pour faire ce job, efficacement et proprement.

n°1882144
the_bigboo
Posté le 08-05-2009 à 14:15:06  profilanswer
 

J'avais le même souci.

 

J'ai fait une class PHP5 basée sur SimpleXML et DomDocument qui gère les conversions de noeuds XML en tableau, et recréé des fichiers XML à partir des tableaux.
Cette class a aussi un autre avantage : elle est à même de gérer les noeuds contenant des itérations de là même manière qu'il y ait une ou n itérations d'un noeud

 

pour faire simple, dans ton exemple tu as deux noeud "sections" en simpleXml tu as donc :

Code :
  1. <?php
  2. foreach( $xml->section as $section )
  3. {
  4.   // some code here...
  5. }
  6. ?>
 

Mais dans le cas ou il pourrait y en avoir n mais qu'il n'y en a qu'un tu es obligé de procéder comme ca :

Code :
  1. <?php
  2. if( !empty( $xml->section->url ) )
  3. {
  4.     // Only one section
  5. }
  6. else
  7. {
  8.      foreach( $xml->section as $section )
  9.      {
  10.        // some code here...
  11.      }
  12. }
  13. ?>


Tous se fait dans la déclaration d'un attribut enumerable="true"

 

http://darknesss.free.fr/XmlParser.class.zip

 

les méthodes qui t'intéressent sont XmlParser::getArray et XmlParser::cleanXmlArray


Message édité par the_bigboo le 08-05-2009 à 14:21:07
n°1882198
an3k
powered on macintosh ^^
Posté le 08-05-2009 à 18:30:53  profilanswer
 

@guybrush : je veux avoir un array pour pouvoir ajouter des informations dynamiques, et donc me "trimbaler" le XML dans mon processus deviendrait vite très lourd.
 
 
@the_bigboo : je vais tester ta classe, merci :)

n°1882231
the_bigboo
Posté le 08-05-2009 à 22:06:58  profilanswer
 

Tiens moi au courant si tu as des idées d'optimisations ;)
Les feedbacks ca m'intéresse !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  XML et récupération de noeuds suivant un chemin

 

Sujets relatifs
Importer XML sous ACCESS via VBAXML Injection dans une requête soap
Récuperer le chemin <input type="file"Utilisation de XML comme base de donnnée
MFC, récuperation d'une adress IPrecuperation ftp
affichage XML dans mailaffichage XML dans mail
PageFlip + fichier XML :s[Réglé](Regex) Récupération d'une chaîne située entre deux mots
Plus de sujets relatifs à : XML et récupération de noeuds suivant un chemin


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR