Précédent   Forum du club des développeurs et IT Pro > 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
 
Outils de la discussion
Publicité
'
Vieux 09/10/2012, 22h53   #1
metatron
Invité régulier
 
Inscription : juin 2005
Messages : 181
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 181
Points : 8
Points : 8
Par défaut Transformer un fichier .XML en Tableau

Bonjour tlm

voila d'un coté j'ai : un fichier .XML comprenant un certain nombres de balises et sous balises correspondant à des modeles auto :

Code :
1
2
3
4
5
6
7
<nom_auto>tolva 22</nom_auto>
        <marque>voldk</marque>
        <prix>8000</prix>
 
<nom_auto>bika 44</nom_auto>
        <marque>mega</marque>
        <prix>5000</prix>

existe t il des convertisseurs ou scripts permettant d'en générer un tableau affichant ces champs et l'image de l'auto par exemple, et qu'en cliquant sur le lien cela affiche la page avec les details du modele en question...???

je ne suis pas spécialiste en PHP et me demandais donc si il était possible d'automatiser tout ca, comment placer les différentes balises dans un tableau cohérent...

Merci par avance pour vos réponses
metatron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2012, 08h59   #2
Fench
Expert Confirmé
 
Avatar de Fench
 
Homme
Chercheur en informatique
Inscription : mai 2002
Messages : 2 346
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Groenland

Informations professionnelles :
Activité : Chercheur en informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2002
Messages : 2 346
Points : 3 231
Points : 3 231
Bonjour,

Regardes ce post dans le forum ici, celà devrait te suffire ...
__________________
Meuuh en AI à l'INRA
Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2012, 22h32   #3
metatron
Invité régulier
 
Inscription : juin 2005
Messages : 181
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 181
Points : 8
Points : 8
bonjour

merci de ta réponse en effet ca fonctionne bien

par contre je bloque sur un soucis plus que basique, j'ai une balise nommée

foreach ($xml->ad->typeProduct id="1"->test.... -

impossible de trouver comment interpreter l espace et les guillemets....:s:s
j'ai un peu cherché mais je n'arrive pas à l afficher, syntax error a chaque fois
typeProduct id=\"1\" ne fonctionne pas
metatron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2012, 22h54   #4
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 578
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 578
Points : 6 005
Points : 6 005
Envoyer un message via Skype™ à rawsrc
Salut,

ce n'est pas une balise nommée mais plutôt un attribut de l'élément typeProduct.
Pour lire les attributs, c'est uniquement avec foreach
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2012, 23h07   #5
metatron
Invité régulier
 
Inscription : juin 2005
Messages : 181
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 181
Points : 8
Points : 8
non car en fait c'est toujours le meme ID pour chaque produit, exemple du fichier XML :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
<ad_list>
<ad>
<id>82201761</id>
<typeProduct id="1">Moto</typeProduct>
<type>Occasion</type>
</ad>
<ad>
<id>8234646</id>
<typeProduct id="1">Auto</typeProduct>
<type>Occasion</type>
</ad>
</ad_list>

quelle serait la syntaxe et boucle à utiliser pour afficher les valeurs typeproduct et type s'il te plait ? j'ai beau tout essayer je n'arrive pas au résultat souhaité
metatron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2012, 23h29   #6
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 578
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 578
Points : 6 005
Points : 6 005
Envoyer un message via Skype™ à rawsrc
Voici comment faire :
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
<?php
 
$xml = <<<XML
<ad_list>
    <ad>
        <id>82201761</id>
        <typeProduct id="1">Moto</typeProduct>
        <type>Occasion</type>
    </ad>
    <ad>
        <id>8234646</id>
        <typeProduct id="1">Auto</typeProduct>
        <type>Occasion</type>
    </ad>
</ad_list>
XML;
 
$sxml = simplexml_load_string($xml);
 
foreach($sxml as $node) {
    $type_products[] = (string)$node->typeProduct;
    $type[]          = (string)$node->type;
}
 
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2012, 23h39   #7
metatron
Invité régulier
 
Inscription : juin 2005
Messages : 181
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 181
Points : 8
Points : 8
ok faire passer le fichier .xml en $node et appeler chaque balise par la suite...
par contre comment pourrais je faire pour afficher les valeurs de chaque id présent ? et je n'ai toujours pas reussi a faire afficher les valeurs des balises que ce soit avec un echo ou un print ca ne veut pas si vous avez une idée...merci par avance
metatron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2012, 23h42   #8
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 578
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 578
Points : 6 005
Points : 6 005
Envoyer un message via Skype™ à rawsrc
Toujours dans la même logique :
Code :
1
2
3
4
5
foreach($sxml as $node) {
    $product_id[]    = (string)$node->typeProduct['id'];    // valeur de l'attribut 'id'
    $type_products[] = (string)$node->typeProduct;          // valeur de l'élément 
    $type[]          = (string)$node->type;                 // valeur de l'élément
}
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2012, 23h48   #9
metatron
Invité régulier
 
Inscription : juin 2005
Messages : 181
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 181
Points : 8
Points : 8
ok merci de ta patience je vais tester ca..

pour afficher ces valeurs en recursif désolé mais je n'arrive pas à trouver la bonne syntaxe, j'essaie avec :


mais il me sort
metatron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2012, 23h57   #10
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 578
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 578
Points : 6 005
Points : 6 005
Envoyer un message via Skype™ à rawsrc
Récursif ? Pas avec un foreach, c'est itératif.
Code :
1
2
3
4
5
foreach($sxml as $node) {
    echo (string)$node->typeProduct['id'];    // valeur de l'attribut 'id'
    echo (string)$node->typeProduct;          // valeur de l'élément 
    echo (string)$node->type;                 // valeur de l'élément
}
Tu débutes en php ? c'est ça ? j'ai bon ?
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2012, 00h03   #11
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 578
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 578
Points : 6 005
Points : 6 005
Envoyer un message via Skype™ à rawsrc
Tu peux aussi poster ton code en entier.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2012, 00h30   #12
metatron
Invité régulier
 
Inscription : juin 2005
Messages : 181
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 181
Points : 8
Points : 8
yes je commence a capter le principe merci....wé clairement je débute je suis plus coté infra systèmes à la base mais ait absolument besoin d'afficher ce fichier xml sous forme de tableau pour un besoin ponctuel...

La finalité du bazar en fait : dans une première page afficher un tableau avec image+marque+produit par exemple, et en cliquant sur l'image on arrive sur le detail du produit, qui reprend le reste des caractéristiques qui sont également spécifiées dans le fichier xml...oui c'est pas gagné pour le moment =)

un extrait du fichier xml comme proposé :

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
<ad_list>
<ad>
<id>82201761</id>
<typeProduct id="1">Spray</typeProduct>
<type>Occasion</type>
<brand>male</brand>
<model>beynit56</model>
<version>LIVE</version>
<firstHand>0</firstHand>
<category>Maquette</category>
<price>5990</price>
<description/>
<comment>
PRODUIT BON ETAT PEU SERVI
</comment>
<photo_list>
<thumb>
1-182.JPG
</thumb>
<photo>
55--1-182.JPG
</photo>
</photo_list>
</ad>
 
<ad>
<id>3457768</id>
<typeProduct id="1">Masque</typeProduct>
<type>Occasion</type>
<brand>male</brand>
<model>inita2</model>
<version>LIVE</version>
<firstHand>0</firstHand>
<category>Caduc</category>
<price>5640</price>
<description/>
<comment>
PRODUIT BON ETAT PEU SERVI
</comment>
<photo_list>
<thumb>
1-182.JPG
</thumb>
<photo>
55--1-182.JPG
</photo>
</photo_list>
</ad>
</ad_list>
donc en gros je souhaiterai que sur une page j'ai mon tableau avec dans chaque case les "typeProduct+brand+thumb", et qu'en clicquant sur l'image ca me renvoie vers une page dédiée au produit, affichant le reste des balises...si tu as une idée sur tout ca ou tout du moins le début je suis preneur merci déja pour les conseils indiqués.
metatron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2012, 15h31   #13
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 578
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 578
Points : 6 005
Points : 6 005
Envoyer un message via Skype™ à rawsrc
Allez parce que c'est le week-end :
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
<?php
 
$xml =
<<<'XML'
<ad_list>
    <ad>
        <id>82201761</id>
        <typeProduct id="1">Spray</typeProduct>
        <type>Occasion</type>
        <brand>male</brand>
        <model>beynit56</model>
        <version>LIVE</version>
        <firstHand>0</firstHand>
        <category>Maquette</category>
        <price>5990</price>
        <description/>
        <comment>PRODUIT BON ETAT PEU SERVI</comment>
        <photo_list>
            <thumb>1-182.JPG</thumb>
            <photo>55--1-182.JPG</photo>
        </photo_list>
    </ad>
    <ad>
        <id>3457768</id>
        <typeProduct id="1">Masque</typeProduct>
        <type>Occasion</type>
        <brand>male</brand>
        <model>inita2</model>
        <version>LIVE</version>
        <firstHand>0</firstHand>
        <category>Caduc</category>
        <price>5640</price>
        <description/>
        <comment>PRODUIT BON ETAT PEU SERVI</comment>
        <photo_list>
            <thumb>1-182.JPG</thumb>
            <photo>55--1-182.JPG</photo>
        </photo_list>
    </ad>
</ad_list>
XML;
 
// lignes du tableau
$rows = array();
// échappement des caractères spéciaux à l'affichage
$hsc  = function($p) { return htmlspecialchars($p, ENT_QUOTES); };
 
$sxml = simplexml_load_string($xml);
foreach($sxml as $node) {
    $type   = (string)$node->typeProduct;
    $brand  = (string)$node->brand;
    $thumb  = (string)$node->photo_list->thumb;
    // idée d'url pour afficher le détail
    $url    = 'http://www.site.com/product.php?id='.(string)$node->id;
    // je considère que chaque image est stockée dans un répertoire /img de ton site
    $src    = 'http://www.site.com/img/'.$thumb;
    $rows[] =
<<<HTML
<tr>
    <td>{$hsc($type)}</td>
    <td>{$hsc($brand)}</td>
    <td><a href="{$url}"><img src="{$src}" alt="Aperçu" /></a></td>
</tr>
HTML;
}
?>
<table>
    <thead>
        <tr>
            <th>Type</th>
            <th>Marque</th>
            <th>Aperçu</th>
        </tr>
    </thead>
    <tbody>
        <?php echo implode("\n", $rows) ?>
    </tbody>
</table>
A toi d'améliorer et de personnaliser
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2012, 16h09   #14
metatron
Invité régulier
 
Inscription : juin 2005
Messages : 181
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 181
Points : 8
Points : 8
ok je tilte à peu près le code sauf cette ligne 45 qui me claque un

Parse error: syntax error, unexpected T_FUNCTION

la ligne 45 correspond à
Code :
$hsc  = function($p) { return htmlspecialchars($p, ENT_QUOTES); };
metatron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2012, 16h17   #15
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 578
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 578
Points : 6 005
Points : 6 005
Envoyer un message via Skype™ à rawsrc
quelle est ta version de php ?
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2012, 16h36   #16
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 578
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 578
Points : 6 005
Points : 6 005
Envoyer un message via Skype™ à rawsrc
Ok laisse tomber, tu dois avoir une version < 5.3
Essaies avec ceci :
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
<?php
 
$xml =
<<<'XML'
<ad_list>
    <ad>
        <id>82201761</id>
        <typeProduct id="1">Spray</typeProduct>
        <type>Occasion</type>
        <brand>male</brand>
        <model>beynit56</model>
        <version>LIVE</version>
        <firstHand>0</firstHand>
        <category>Maquette</category>
        <price>5990</price>
        <description/>
        <comment>PRODUIT BON ETAT PEU SERVI</comment>
        <photo_list>
            <thumb>1-182.JPG</thumb>
            <photo>55--1-182.JPG</photo>
        </photo_list>
    </ad>
    <ad>
        <id>3457768</id>
        <typeProduct id="1">Masque</typeProduct>
        <type>Occasion</type>
        <brand>male</brand>
        <model>inita2</model>
        <version>LIVE</version>
        <firstHand>0</firstHand>
        <category>Caduc</category>
        <price>5640</price>
        <description/>
        <comment>PRODUIT BON ETAT PEU SERVI</comment>
        <photo_list>
            <thumb>1-182.JPG</thumb>
            <photo>55--1-182.JPG</photo>
        </photo_list>
    </ad>
</ad_list>
XML;
 
// lignes du tableau
$rows = array();
 
$sxml = simplexml_load_string($xml);
foreach($sxml as $node) {
    $type   = htmlspecialchars((string)$node->typeProduct, ENT_QUOTES);
    $brand  = htmlspecialchars((string)$node->brand, ENT_QUOTES);
    $thumb  = (string)$node->photo_list->thumb;
    // idée d'url pour afficher le détail
    $url    = 'http://www.site.com/product.php?id='.(string)$node->id;
    // je considère que chaque image est stockée dans un répertoire /img de ton site
    $src    = 'http://www.site.com/img/'.$thumb;
    $rows[] =
<<<HTML
<tr>
    <td>{$type}</td>
    <td>{$brand}</td>
    <td><a href="{$url}"><img src="{$src}" alt="Aperçu" /></a></td>
</tr>
HTML;
}
?>
<table>
    <thead>
        <tr>
            <th>Type</th>
            <th>Marque</th>
            <th>Aperçu</th>
        </tr>
    </thead>
    <tbody>
        <?php echo implode("\n", $rows) ?>
    </tbody>
</table>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2012, 16h49   #17
metatron
Invité régulier
 
Inscription : juin 2005
Messages : 181
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 181
Points : 8
Points : 8
oui monsieur ca fonctionne bien merci bcp
me reste plus qu'a l'adapter avec mon fichier xml en ligne et de mettre de la mise en forme. Je me pencherai après sur les pages de détail des produits.
En effet je suis en version 5.2.17

merci encore pour ton aide je vais continuer à tester tout ca.
metatron est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h12.


 
 
 
 
Partenaires

Hébergement Web