Accueil > Forum > > > > SPL & RecursiveIteratorIterator : Afficher les infos (XML)
SPL & RecursiveIteratorIterator : Afficher les infos (XML)
mardi 24 février 2009 à 01:38:29 |
SPL & RecursiveIteratorIterator : Afficher les infos (XML)

JoJo738
|
Bonsoir à tous ^^ Voila déjà un petit moment que je n'étais pas venu. Si ce soir (ou plutôt, ce matin) je suis ici, c'est pour une question qui me turlupine depuis déjà quelques temps : la SPL. Je dispose de données récursives (par exemple XML), et je voudrais afficher ces infos me manière récursive, en respectant bien d'imbrication des blocs (Vous me suivez ?) Arf, je n'arrive plus à m'exprimer de si bonne heure ... Un bon dessin vaut mieux qu'un long discours ... Données :
$xml =<<<EOF <doc> <h1 title="Titre 1.1"> <text>Text</text> <h2 title="Titre 1.2"> <text>Texte (1.2)</text> </h2> </h1> </doc> EOF;
| Return :
<h1 title="Titre 1.1"> <text>Text</text> <h2 title="Titre 1.2"> <text>Texte (1.2)</text> </h2> </h1>
(qui sera converti en code XHtml)
|
Pour faire simple, je voudrais afficher les infos XML en conservant le format.
Bref, pas de changement quoi ^^ Enfin, si ... car j'essaye désespérément d'utiliser la SPL (dont il manque de sérieuses explications ... dur dur de trouver des infos dessus (exemples concrets)
Mon idée, était d'utiliser RecursiveIteratorIterator, mais je n'obtient pas ce que je veux (même en jouant sur SELF_FIRST, CHILD_FIRST, LEAVES_ONLY, ...) Je n'arrive pas à avoir : open <h1> open <text> open <h2> close </h2> close </text> close </text> (j'y arrive en jouant sur les [begin/end]Children(), mais je n'ai que les 1er nodes (formatés) : logique). Cela doit être une mauvaise utilisation ... Ou une méconnaissance sur les fonctions disponibles J'y arrive sans la SPL, mais je me demandais s'il n'était pas possible d'utiliser la puissance de cette dernière ... Sinon, avez vous des exemples concrets, ou un exemple à me proposer ? Merci :p Si ma reponse te convient, merci de l'accepter ! 
|
|
vendredi 27 février 2009 à 19:46:35 |
Re : SPL & RecursiveIteratorIterator : Afficher les infos (XML)

malalam
|
Hello Jojo :-)
tu vois, j'accours...;-) Bon heu là, sincèrement, je rentre du taf et je n'ai pas la tête à ça...mais ta question est intéressante. Est-ce que c'est possible via la SPL ? Oui, très certainement! Comment? Le problème de la SPL c'est que c'est compliqué à utiliser, en tous cas pour des utilisations poussées. Et quand il y a de la récursivité, c'est pire encore...ça demande toujours pas mal de réflexion et d'essais. Donc...laisse moi un peu de temps ce week-end, je tâcherai de me pencher sur ton problème. Je ne serai pas dispo toute la semaine prochaine (déplacement pro au Maroc) donc si ce we je n'ai pas le temps, faudra que t'attendes mon retour. Mais de ce que j'en lis, tu pars bien...en tous cas, je serais parti sur la même voie :-)
|
|
vendredi 27 février 2009 à 19:48:35 |
Re : SPL & RecursiveIteratorIterator : Afficher les infos (XML)

malalam
|
Je tiens quand même à ajouter que vu ce que tu veux faire (je viens de remarquer que tu transformais ton doc en xhtml), ni la SPL, ni un "parser" PHP ne sont les outils les plus adaptés et les plus puissants...faut regarder du côté de XSL, là...et crois-moi, ce serait TRES simple... Mais avec la SPL, ça devrait être rigolo et c'est un exercice intéressant, je vais donc regarder.
|
|
vendredi 27 février 2009 à 20:19:39 |
Re : SPL & RecursiveIteratorIterator : Afficher les infos (XML)

malalam
|
Bon allez, j'ai quand même pas résisté à l'envie de jeter un oeil rapide...je te donne une voie : <?php $xml =<<<EOF <?xml version='1.0' encoding="UTF-8"?> <doc> <h1 title="Titre 1.1"> <text>Text</text> <h2 title="Titre 1.2"> <text>Texte (1.2)</text> </h2> </h1> </doc> EOF;
$it = new RecursiveIteratorIterator(new SimpleXMLIterator($xml)); $it->rewind(); while($it->valid()) { print_r($it->getInnerIterator()); $it->next(); } ?>
Si tu t'en sors pas, je t'aide un peu plus ce we :-)
|
|
samedi 28 février 2009 à 01:26:01 |
Re : SPL & RecursiveIteratorIterator : Afficher les infos (XML)

JoJo738
|
Lu, Merci pour le coup de main ;) Je sais, mais j'aimerais vraiment utiliser la SPL (c'est ma petite folie du moment). En fait, j'utilise ce code pour afficher du GEDCOM (format pour fichier généalogique et un autre projet), et il n'y aura pas forcement une sortie XHtml ... ^^ En fait, ce que tu me propose, c'est le code que j'utilisais .. le seule problème, c'est pour "refermer les balises" Avec ton code, (et le XML quasi similaire), j'obtiens : # OPEN [text] Text # OPEN [text] Texte 1 a (1.1 a) Texte 1 b (1.1 b) # CLOSE Text # OPEN [text] Texte 2 a (1.2 a) Texte 2 b (1.2 b) # CLOSE
# CLOSE
Alors que moi je voudrais avoir : # OPEN [H1] # OPEN text // j'ai Text # CLOSE Text # CLOSE [H1] ...
Ou tout du moins, quelque chose dans ce genre ... Après moults essais, j'arrive à quelque chose (en jouant principalement sur la fonction current()) .. mais bon, ça ne me plait pas trop ... (Le pire c'est que j'ai déjà trouvé la solution quelque part ...) Voici mon brouillon code: Class _R extends RecursiveIteratorIterator { public $hLevel = array(); function BeginChildren() { echo '<div style="padding-left: 10px;">'; echo "\n"; } function current() { $c = parent::current(); switch ($this -> key()) { case 'h' : $n = $this -> getDepth(); if( isset($this -> hLevel[$n]) ) { $this -> hLevel[$n]++; $divtitleavt = "\n" . '</div>'; $divtitle = "\n" . '<div class="h">'; //echo '<strong>H++</strong>'; } else { $this -> hLevel[$n] = 1; $divtitleavt = ''; $divtitle = "\n" . '<div class="h">'; //echo '<strong>H "', $n, '" CREATED</strong>'; } $depth = count($this -> hLevel); $depth = $depth > 7 ? 6 : $depth; return $divtitleavt . "\n" . '<h' . $depth . ' class="title">' . implode('.', $this -> hLevel) . ' - ' . trim($c['title']) . '</h' . $depth . '>' . $divtitle; break; case 'demo' : return "\n" . '<div class="demo"><h6 class="t">Démonstration :</h6>' . trim($c) . '</div>'; break; case 'expl' : return "\n" . '<div class="expl"><h6 class="t">Exemple :</h6>' . trim($c) . '</div>'; break; case 'text' : return "\n" . '<p class="text">{T:' . trim($c) . '}</p>'; break; } return parent::current(); } function EndChildren() { echo '</div>'; echo "\n"; if( isset($this -> hLevel[$this -> getDepth()]) ) { unset($this -> hLevel[$this -> getDepth()]); echo '</div>'; } } }
$it = new _R(new SimpleXMLIterator($xml), _R::SELF_FIRST); foreach( $it as $key => $val ) { echo $val; }
Arf, je sens que je vais retrouner aux bonnes vielles fonctions récursives ^^ Merci de l'aide ^^ Et tu as ton temps, de toute façon je dois bosser aussi ... je risque de pas trop être présent :p B'soir Si ma reponse te convient, merci de l'accepter ! 
|
|
Cette discussion est classée dans : arrive, afficher, infos, xml, spl
Répondre à ce message
Sujets en rapport avec ce message
Selections de valeurs en mysql et autres.... [ par Trigun222 ]
Bonjour,Je n'arrive décidement pas à faire comprendre mon probleme j'espere que quelqu'un ici comprendra :(J'ai un site ou je devellope en ce moment u
Forum : comment ca marche ? [ par BSide ]
BSideBonjour,pouvez-vous m'expliquer comment fonctionne un forum ?Plus précisément : je souhaite afficher sous forme de tableau le contenu d'une BD ma
je n'arrive pas a afficher ma requete [ par mictif ]
bonjours voila j'ai une requette qui doit me trouver une ligne de ma table et je n'arrive pas a afficher le resultat de ma requete!je vous laisse mon
Impossible d'afficher l'entrée XML en utilisant la feuille de style XSL [ par louna_r ]
ok voila mon code.la variable $t est récupérer d'un formulaire. cette variable doit etre mise dans un fichier xml mé voila ce que je recoit en exécuti
[debutant] relire un fichier xml avec php4 pour afficher les donnée contenue dans le fichier xml [ par almisuifre ]
Bonjour, J'ai un fichier xml qui se présente sous cette forme la: <DescriptionMag
afficher logo et nom [ par maxwellcs ]
Bonjour à tous!!! Voila mon petit problème:J'ai une table qui s'appelle client Les champs sont id,nom et logo ( je simplifie au max !!!) J'arrive tre
afficher qu'une section d'un document xml [ par morpheus262 ]
Bonjour,J'aimerai savoir si il est possible d afficher qu une partie d'un document xml, autrement dit, juste le contenue d'une balise. et si oui comme
traitement du xml [ par titeuf974 ]
Bonjour!Voila, j'ai une toute petite question. Voila, j'ai un document xml tout bête. Dans ce document, j'ai une récurence d'un noeud que j'appel item
XML ou MySQL [ par jipe32 ]
Bonjour à tous,je conçois des sites pour des gens et je voudrais afficher de la publicité sur ceux-ci, mais sans passer par AdSense ou autre. Donc je
LIRE DES BALISES XML [ par loupile ]
bonjour, je suis en PHP5 j'arrive bien a lire le contenu de balise simple dans un fichier xml mais je n'arrive pas a lire des balises aves des caracte
Livres en rapport
|
Derniers Blogs
SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio
Forum
CHAMPS TIMECHAMPS TIME par vargas
Cliquez pour lire la suite par vargas
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|