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] Transformer un fichier .XML en Tableau


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 181
    Points : 38
    Points
    38
    Par défaut [XML] 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    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 353
    Points : 3 390
    Points
    3 390
    Par défaut
    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)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 181
    Points : 38
    Points
    38
    Par défaut
    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

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    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

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 181
    Points : 38
    Points
    38
    Par défaut
    non car en fait c'est toujours le meme ID pour chaque produit, exemple du fichier XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Voici comment faire :
    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
    <?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;
    }
     
    ?>

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 181
    Points : 38
    Points
    38
    Par défaut
    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

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Toujours dans la même logique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    }

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 181
    Points : 38
    Points
    38
    Par défaut
    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

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Récursif ? Pas avec un foreach, c'est itératif.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  11. #11
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Tu peux aussi poster ton code en entier.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 181
    Points : 38
    Points
    38
    Par défaut
    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 : 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
    <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.

  13. #13
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Allez parce que c'est le week-end :
    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
    <?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

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 181
    Points : 38
    Points
    38
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $hsc  = function($p) { return htmlspecialchars($p, ENT_QUOTES); };

  15. #15
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    quelle est ta version de php ?

  16. #16
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ok laisse tomber, tu dois avoir une version < 5.3
    Essaies avec ceci :
    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
    <?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>

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 181
    Points : 38
    Points
    38
    Par défaut
    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.

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

Discussions similaires

  1. comment convertir un fichier xml en tableau de string (java)
    Par l'indien dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 27/02/2006, 21h00
  2. [XSL] Comment transformer un fichier XML en un autre XML
    Par elzedo dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 16/01/2006, 10h51
  3. [SimpleXML] Comment faire pour transformer un fichier XML en PHP ?
    Par magic8392 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/09/2005, 16h22
  4. Transformer un fichier XML en SVG
    Par LEK dans le forum ASP
    Réponses: 2
    Dernier message: 05/07/2005, 21h52
  5. Réponses: 4
    Dernier message: 23/06/2005, 12h44

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