IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[XML] [EXPAT] Affichage dynamique de données xml dans un tableau après lecture avec sax


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 147
    Points : 66
    Points
    66
    Par défaut [XML] [EXPAT] Affichage dynamique de données xml dans un tableau après lecture avec sax
    J'ai fait un lecture de mon fichier xml avec sax. Un extrait de ce fichier ainsi que le résultat de ce parcours se trouve ci-dessous.

    Mon problème est le suivant: j'aimerais afficher ce résultat dans un tableau. Sur chaque ligne : le nom et le téléphone.

    Or actuellement, il m'affiche un bloc (voir résultat ci-dessous). Comment lui dire qu'il ya +sieurs "HIT" et que chaque HIT répresente une ligne (nom et téléphone de X)

    Voila un extrait du fichier xml:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <Hit url="_g=valeur1" score="0">
        <!-- ... -->
        <HitField name="size" value="437" />
        <HitField name="cn" value="MARTIN DERVILLE />
        <HitField name="phone" value="0145785222 />
        <HitField name="c" value="FR" />
         <!-- ... -->
    </Hit>
    <Hit url="_g=valeur2" score="4">
        <!-- ... -->
        <HitField name="size" value="437" />
        <HitField name="cn" value="MARTIN LOUIS />
        <HitField name="phone" value="0125478965 />
        <HitField name="c" value="FR" />
         <!-- ... -->
    </Hit>

    et le resultat :

    MARTIN DERVILLE
    0145785222
    MARTIN LOUIS
    0125478965

    MOI JE VEUX AFFICHER CECI:

    MARTIN DERVILLE 0145785222

    MARTIN LOUIS 0125478965


    Merci à tous

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Une version PHP 5:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    interface SAXHandler {
        public function startElement($parser, $name, Array $attrs);
        public function endElement($parser, $name);
        public function characterData($parser, $data);
    }
     
    class HitHandler implements SAXHandler {
        private $cn;
        private $phone;
     
        public function __construct() {
            echo '<table>'; // A déplacer dans la méthode startElement
        }
     
        public function startElement($parser, $name, Array $attrs) {
            if ($name == 'HITFIELD') {
                if ($attrs['NAME'] == 'cn') {
                    $this->cn = $attrs['VALUE'];
                } else if ($attrs['NAME'] == 'phone') {
                    $this->phone = $attrs['VALUE'];
                }
            } else if ($name == 'HIT') {
                $this->phone = $this->cn = '';
            }
        }
     
        public function endElement($parser, $name) {
            if ($name == 'HIT' && !empty($this->cn) && !empty($this->phone)) {
                printf('<tr><td>%s</td><td>%s</td></tr>', $this->cn, $this->phone);
            }
        }
     
        public function characterData($parser, $data) {
            /* NOP */
        }
     
        public function __destruct() {
            echo '</table>'; // A déplacer dans la méthode endElement
        }
    }
     
    abstract class SAXParser
    {
        protected $parser;
     
        public function __construct(SAXHandler $handler) {
            $this->parser = xml_parser_create();
            xml_set_object($this->parser, $this);
            xml_set_element_handler($this->parser, array($handler, 'startElement'), array($handler, 'endElement'));
            xml_set_character_data_handler($this->parser, array($handler, 'characterData'));
        }
     
        public function __destruct() {
            xml_parser_free($this->parser);
        }
    }
     
    class SAXFileParser extends SAXParser
    {
        public function __construct($file, SAXHandler $handler) {
            if (is_file($file)) {
                parent::__construct($handler);
                $fp = fopen($file, 'r');
                while ($data = fread($fp, 4096)) {
                    if (!xml_parse($this->parser, $data, feof($fp))) {
                        throw new Exception(sprintf("Erreur XML : %s à la ligne %d", xml_error_string(xml_get_error_code($this->parser)), xml_get_current_line_number($this->parser)));
                    }
                }
                fclose($fp);
            } else {
                throw new Exception("Erreur : '$file' est inexistant ou n'est pas un fichier régulier");
            }
        }
    }
     
    try {
        $sfp = new SAXFileParser('hits.xml', new HitHandler());
    } catch(Exception $e) {
        die($e->getMessage());
    }
    Qui génère :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <table><tr><td>MARTIN DERVILLE</td><td>0145785222</td></tr><tr><td>MARTIN LOUIS</td><td>0125478965</td></tr></table>


    Par contre l'extrait de code XML donné plus haut est mal formé !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Répartir les données d'un XML dans un tableau
    Par GrandFather dans le forum Télécharger
    Réponses: 0
    Dernier message: 10/01/2012, 16h15
  2. Réponses: 28
    Dernier message: 08/10/2009, 18h10
  3. affichage dynamique de variable php dans javascript
    Par Revan dans le forum Langage
    Réponses: 6
    Dernier message: 11/05/2008, 13h25
  4. Réponses: 1
    Dernier message: 09/07/2007, 17h13
  5. [OpenTBS] Template et affichage dynamique de données
    Par touff5 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 30/05/2006, 19h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo