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

XSL/XSLT/XPATH XML Discussion :

[XPATH][PHP] Extraire une donnée au choix d'un XML


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 23
    Points : 15
    Points
    15
    Par défaut [XPATH][PHP] Extraire une donnée au choix d'un XML
    Bonjour,

    Pour un projet, je dois afficher une seule donnée provenant de plusieurs XML... Je m'explique avec des schémas pour être plus clair.

    Voici des exemples de mes XML (notez que leurs structures ne sont pas modifiables car ces XML sont utilisés par un Grid obligeant cette organisation)

    Un premier fichier population.xml
    <data>
    <record><rank>1</rank><country code="cn">Chine</country><cont>Asie</cont><pop>1330044605</pop><year>2008</year></record>
    <record><rank>2</rank><country code="in">Inde</country><cont>Asie</cont><pop>1147995898</pop><year>2008</year></record>
    <record><rank>3</rank><country code="us">Etats-Unis</country><cont>Amériques</cont><pop>303824646</pop><year>2008</year></record>
    <record><rank>4</rank><country code="id">Indonésie</country><cont>Asie</cont><pop>237512355</pop><year>2008</year></record>
    <record><rank>5</rank><country code="br">Brésil</country><cont>Amériques</cont><pop>191908598</pop><year>2008</year></record>
    </data

    Un second pibhab.xml
    <data><record><rank>1</rank><country code="lu">Luxembourg</country><cont>Europe</cont><pibhab>79 851</pibhab><year>2005</year></record>
    <record><rank>2</rank><country code="no">Norvège</country><cont>Europe</cont><pibhab>63 918</pibhab><year>2005</year></record>
    <record><rank>3</rank><country code="is">Islande</country><cont>Europe</cont><pibhab>53 290</pibhab><year>2005</year></record>
    <record><rank>4</rank><country code="qa">Qatar</country><cont>Asie</cont><pibhab>52 240</pibhab><year>2005</year></record>
    <record><rank>5</rank><country code="ch">Suisse</country><cont>Europe</cont><pibhab>49 351</pibhab><year>2005</year></record></data>

    ... etc ...

    J'ai alors une page.php par pays... Le résultat que je souhaiterais serait celui-ci :

    Pour ma page France.php :
    - Population : ici aller chercher la donnée <pop> du pays France dans le fichier population.xml
    - PIB par habitant : ici aller chercher la donnée <pibhab> du pays France dans le fichier pibhab.xml

    J'ai lu pas mal de documentations sur SimpleXML ou DOM mais je n'ai rien trouvé quant à ma requête : comment réussir à afficher uniquement la donnée <pop> ou <pibhab> en fonction du nom du pays (<country code=..>) ou du <rank>.

    Je vous remercie par avance,
    Cordialement,

  2. #2
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    //pop[./preceding-sibling::country/@code ='fr']

  3. #3
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    La méthode la plus simple pour obtenir ceci est d'utiliser les modules dom et/ou simplexml qui te permettront d'utiliser le Xpath ci-dessus

    voir le lien
    http://stephaneey.developpez.com/tut...uveautes/#L2.2

    Interaction avec DOMXML
    Il est possible de transférer à SimpleXML un objet DOM préalablement instancié. Cette manipulation se fait comme ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $xml = new domDocument ;
    $xml->load('nouvelles.xml') ;
    $simpleXml = simplexml_import_dom($xml);
    Utilisation de la méthode xpath
    La méthode xpath permet de pointer directement un nœud spécifique.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?
    $nouvelles = simplexml_load_file('nouvelles.xml'); 
    $xpath = '/nouvelles/nouvelle/contenu';
    $nouvelle = $nouvelles->xpath($xpath) ;
     
    foreach( $nouvelle as $news ) { echo utf8_decode($news);}
    ?>

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    J'ai omis de dire que je suis un grand débutant dans ces langages...

    Le bout de code de fraoustin m'a lair particulièrement intéressant mais je ne sais pas comment le faire fonctionner.
    Quant à la doc de Stéphane Eyskens, elle m'a l'air toute à fait pertinente mais, là encore, même en repretant l'exemple, je ne parviens pas à faire vivre ce code. Je me suis tourné vers mon serveur, il accepte bien le php5.

    Avez vous d'autres consignes pour faire fonctionner ce Xpath ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Bonjour à tous,

    Je n'ai toujours pas réussi à faire fonctionner ce code...

    Avec tous ce que j'ai vu à ce sujet sur différents tutoriaux, je suis complétement embrouillé. Si quelqu'un pourrait m'aider à mettre ce bout de code en place, ce serait très sympa, c'est dommage je suis pourtant sur que ce n'est pas grand chose mais une fois que je serais sur la bonne piste, je pense pouvoir maitriser.

    Merci d'avance,

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Bonsoir,

    J'ai cherché un bout de code qui, je pense, permettrait de faire fonctionner le Xpath de fraoustin... mais j'ai une petite erreur. Ne connaissant pas les particularités de ce langage, merci de m'indiquer ce qui ne va pas.

    <html>
    <head>
    <title>Untitled Document</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>

    <body bgcolor="#FFFFFF" text="#000000">
    <?php

    $dom_object*=*new*DomDocument();

    $dom_object->load("population.xml");

    $xpath*=*new*Domxpath($dom_object);

    $result*=*$xpath->query("//pop[./preceding-sibling::country/@code ='fr']");

    print*("<ul>");
    foreach*($result*as*$exercise)*{
    print*("<li>");
    $title*=*$xpath->query*("title",*$exercise);
    print*($title->item(0)->nodeValue*.*"</li>\n");*
    }
    print*("</ul>");

    ?>
    </body>
    </html>
    Voici mon erreur (qu'est ce que homez.11 ?)
    Parse error: syntax error, unexpected T_VARIABLE in /homez.11/geopopul/www/bdd/1.php5 on line 16

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 23
    Points : 15
    Points
    15
    Par défaut
    Salut !!

    Je suis trop content, j'ai enfin (enfin !!) réussi à faire fonctionner ce que je voulais : appeler les données une par une. Merci à vous fraoustin et erwy pour m'avoir indiquer le XPath.

    Voici mon code :
    <?php
    $dom_object = new DomDocument();
    $dom_object->load("population.xml");
    $xpath = new Domxpath($dom_object);
    $result = $xpath->query("//pop[./preceding-sibling::country/@code ='fr']/.");
    foreach ($result as $exercise) {
    print "<pre>" . $exercise->nodeValue. "</pre>\n";}
    ?>
    J'ai cependant encore deux questions de simple formalité :
    - combien de fois puis-je faire appel à ce code sur une même page sans que cela n'entrave trop son chargement? 10, 50, 100 fois?
    - est-il possible de mettre en forme automatiquement les données à afficher? mettre un séparateur de milliers (1000 deviendrait 1.000)

    Merci !

  8. #8
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    déjà, si tu garde le même xml il est inutile de répéter cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $dom_object = new DomDocument();
    $dom_object->load("population.xml");
    Pour le reste c'est de la problématique php et ce n'est pas du tout ma partie

    Bonne continuation

Discussions similaires

  1. [MySQL] Extraire une données en fonction de l'id'
    Par flamel dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/03/2009, 17h52
  2. Extraire une donnée d'une cellule
    Par fmris dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/12/2008, 21h19
  3. [javascript/php]Recharger une page après choix dans liste déroulante
    Par eyango dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/01/2008, 13h34
  4. Extraire une donnée d'un fichier aleatoirement
    Par ranell dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 25/03/2007, 22h33
  5. [PHP] Recuperer une donnée suite a un webservice
    Par budiste dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 10/04/2006, 22h11

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