begin process at 2012 02 14 09:09:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Classes & Objets

 > 

SPL & RecursiveIteratorIterator : Afficher les infos (XML)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

SPL & RecursiveIteratorIterator : Afficher les infos (XML)

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

JoJo738

Membre Club
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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS
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

Membre Club
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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales