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 :

[SimpleXML] et xpath


Sujet :

Bibliothèques et frameworks PHP

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 11
    Par défaut [SimpleXML] et xpath
    Bonjour,
    Voila j'utilise un fichier xml comme celui-ci
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?xml version="1.0" encoding="iso-8859-1"?>
    <produits>
    <produit>
    <idproduit>58500150</idproduit>
    <codearticle></codearticle>
    <codebarre>3760055184052</codebarre>
    <reffournisseur></reffournisseur>
    <nomfournisseur></nomfournisseur>
    <nomproduit><![CDATA[xxxxx]]></nomproduit>
    <etat>neuf</etat>
    <categorie><![CDATA[xxx]]></categorie>
    <theme>xxxx</theme>
    <prix>00</prix>
    <urlficheproduit><![CDATA[http://xxxxxxxxxxxxxx.redir?id_compteur=ID_COMPTEUR&url=http://xxxxxxxxx/sort1%3Ft%3DTRACKING_CODE]]></urlficheproduit>
    <urlimage><![CDATA[http://xxxxx.jpg]]></urlimage>
    <urlimageoriginal><![CDATA[http:xxxxjpg]]></urlimageoriginal>
    <genre><![CDATA[Musical, Spectacle]]></genre>
    <realisateur><![CDATA[., xxx]]></realisateur>
    <acteurs></acteurs>
    <interprete></interprete>
    <editeur><![CDATA[xxx]]></editeur>
    <descriptif><![CDATA[xxxx.]]></descriptif>
    <disponibilite>xx</disponibilite>
    <dateexpedition>xx</dateexpedition>
    <fraisdeport>00</fraisdeport>
    </produit>
    </produits>
    j'utilise simplxml pour le mettre en forme
    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
    <?php
    $produits = simplexml_load_file('test.xml');
     
    foreach($produits->produit as $produit) {
        echo '<table width="300">';
       echo '<tr>';
       echo '<td rowspan="2"><img src="'.($produit->urlimage).'"></td>';
       echo '<td colspan="2">',utf8_decode($produit->nomproduit).'</td>';   
       echo '</tr>';   
       echo '<tr>';
       echo '<td colspan="2">',utf8_decode($produit->descriptif).'</td>';
       echo '</tr>';
       echo '<tr>';
       echo '<td>logo</td>';
       echo '<td align="center">',utf8_decode($produit->prix).' €</td>';
       echo '<td><a href="'.($produit->urlficheproduit).'" target="_blank">Achetez maintenat</a></td>';
       echo '</tr>';
       echo '</table>';
     
    }
    ?>
    Mais là je vais afficher tout mon fichier xml (30 mo)
    Je voudrai n'afficher que la catégorie <genre><![CDATA[Musical, Spectacle]]></genre>donc tout ce qui fait partie de cette catégorie et rien d'autre.
    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $produits = simplexml_load_file('test.xml')->xpath('/produit/genre/attribute::Musical,Spectacle');
    Mais cela me renvoie une erreur, on n'est quand même pas obligé de couper le fichier xml?

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Il me semble que ta requête XPath est incorrecte, et puis tes CDATA vont gêner.
    Si j'ai bien compris tu veux récupérer les <produit> dont le sous-élément <genre> vaut "Musical, Spectacle" c'est bien cela ? Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $xml = simplexml_load_file('data.xml', 'SimpleXMLElement', LIBXML_NOCDATA) ;
    $rs = $xml->xpath('//produit[genre="Musical, Spectacle"]') ;

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 11
    Par défaut
    Bonjour et merci pour votre réponse
    j'ai donc essayé 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
    <?php 
    $xml = simplexml_load_file('test.xml', 'SimpleXMLElement', LIBXML_NOCDATA) ;
    $rs = $xml->xpath('//produit[genre="Musical, Spectacle"]') ;
     
    foreach($produits->produit as $produit) {
        echo '<table width="300">';
    	echo '<tr>';
    	echo '<td rowspan="2"><img src="'.($produit->urlimage).'"></td>';
    	echo '<td colspan="2">',utf8_decode($produit->nomproduit).'</td>';	
    	echo '</tr>';	
    	echo '<tr>';
    	echo '<td colspan="2">',utf8_decode($produit->descriptif).'</td>';
    	echo '</tr>';
    	echo '<tr>';
    	echo '<td><logo</td>';
    	echo '<td align="center">',utf8_decode($produit->prix).' €</td>';
    	echo '<td><a href="'.($produit->urlficheproduit).'" target="_blank">Achetez maintenat</a></td>';
    	echo '</tr>';
    	echo '</table>';
     
    }
    ?>
    j'ai une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Invalid argument supplied for foreach() in /var/www/virtual/netoupasnet.net/htdocs/fluxxmldvd/pm.php on line 13
    Là je suis un peu perdu...

  4. #4
    Membre expérimenté

    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
    Par défaut
    La variable $produits ne correspond plus à rien maintenant. C'est $rs, résultat de la requête XPath, qu'il faut parcourir (ou adapter en conséquence).

    (Un message d'erreur de type notice devrait apparaître dans tout environnement de développement bien configuré )

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 11
    Par défaut
    Voila j'ai fait mon code comme cela:
    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
    <?php 
    $produits = simplexml_load_file('test.xml', 'SimpleXMLElement', LIBXML_NOCDATA) ;
    $rs = $produits->xpath('//produit[genre="Musical, Spectacle"]') ;
     
    foreach($produits->produit as $produit) {
     
        echo '<table width="300">';
    	echo '<tr>';
    	echo '<td rowspan="2"><img src="'.($produit->urlimage).'"></td>';
    	echo '<td colspan="2"><span class="Style6">',utf8_decode($produit->nomproduit).'</span></td>';	
    	echo '</tr>';	
    	echo '<tr>';
    	echo '<td colspan="2"><span class="Style3">',utf8_decode($produit->descriptif).'</span></td>';
    	echo '</tr>';
    	echo '<tr>';
    	echo '<td>logo</td>';
    	echo '<td align="center"><span class="Style5">',utf8_decode($produit->prix).' €</span></td>';
    	echo '<td><a href="'.($produit->urlficheproduit).'" target="_blank">Achetez maintenat</a></td>';
    	echo '</tr>';
    	echo '</table>';
     
    }
     
    ?>
    Mais cela ne fonctionne pas, il m'inscrit toutes les catégories. ou est mon erreur?

  6. #6
    Membre expérimenté

    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
    Par défaut
    Et à quoi vous sert votre requête XPath, là, si vous n'en exploitez pas le résultat ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($produits->produit as $produit) {

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($rs as $produit) {
    (à moins d'être plus direct et de ne pas passer par une variable intermédiaire)

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 11
    Par défaut
    Merci,
    C'est exact j'ai été un peu trop vite, en tout les cas cela fonctionne

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

Discussions similaires

  1. SimpleXML avec XPATH pour une requete simple en apparence
    Par NissqR dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 23/03/2010, 10h09
  2. simplexml et xpath XML
    Par polyvan dans le forum Langage
    Réponses: 2
    Dernier message: 01/04/2009, 11h11
  3. [SimpleXML] Expression Xpath Et Simplexml
    Par ANISSS dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 14/04/2007, 20h07
  4. [SimpleXML] Est-il possible d'utiliser des expressions XPATH 2.0 avec simplexml ?
    Par ANISSS dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 09/11/2006, 09h14
  5. [XPath][SimpleXML] probleme avec simplexml et xpath
    Par ANISSS dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/10/2006, 16h54

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