Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML
XML Forum d'entraide sur XML avec PHP. Exemples : SimpleXML, OpenXML... Avant de poster -> FAQ XML, Cours XML et Sources XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/07/2007, 18h18   #1
Nouveau Membre du Club
 
Inscription : mai 2007
Messages : 142
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 142
Points : 33
Points : 33
Par défaut [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 :
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
GLSpirit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2007, 18h44   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Une version PHP 5:
Code :
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 :
<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é !
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h20.


 
 
 
 
Partenaires

Hébergement Web