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] Problème de récuperation d'attribut


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 31
    Par défaut [SimpleXML] Problème de récuperation d'attribut
    Bonjour,

    Je me met tout doucement au xml et j'ai un problème avec une récupération de donnée. Je voudrais intégrer les taux de change dans mon site et j'ai sur le site de la banque centrale europénne est fourni un fichier XML mis à jour chaque jour. Sous la forme :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
    	<gesmes:subject>Reference rates</gesmes:subject>
    	<gesmes:Sender>
    		<gesmes:name>European Central Bank</gesmes:name>
    	</gesmes:Sender>
    	<Cube>
    		<Cube time="2007-08-20">
    			<Cube currency="USD" rate="1.3476"/>
    			.....
    			<Cube currency="BGN" rate="1.9558"/>
    		</Cube>
    	</Cube>
    </gesmes:Envelope>

    Sous cette forme je n'arrive pas a récupérer les attributs dont j'ai besoin par contre si je transforme le fichier sous cette forme ca fonctionne.

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-8"?>
    	<Cube>
    		<Cube time="2007-08-20">
    			<Cube currency="USD" rate="1.3476"/>
    			...
    			<Cube currency="BGN" rate="1.9558"/>
    		</Cube>
    	</Cube>

    J'utilise cette fonction php pour récupérer les attributs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $bibliotheque = simplexml_load_file('date.xml');
     
    foreach ($bibliotheque->Cube as $date) {
      foreach ($date->Cube as $currency) {
        print "\nCours {$currency['currency']} <br />\n";
        print "\nTaux {$currency['rate']} <br />\n";
        }
        }
    ?>
    Le problème c'est que je perds tout l'intérêt de récupérer les données sur le net si je dois moi même modifier le fichier chaque jour. De plus j'ai un peu de mal a comprendre a quoi correspondre les balises sous la forme <xxx : xxx>. Voilà j'éspère avoir été clair et que quelqu'un pourra éclairer ma lanterne merci d'avance.

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 64
    Par défaut
    Les "quelque chose : quelque chose" sont des espaces de nom ( xmlns = xml namespace )

    Il semblerait qu'il y ait un souci avec simpleXML et les espaces de nom.



    Un bout de code qui te donnerait ce que tu veux via une bidouille ( issue de : http://fr2.php.net/manual/fr/functio...path.php#47729 )

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $url =  "test.xml" ;
    $sxmltxt=file_get_contents($url);
    $sxmltxt=str_replace("xmlns=","a=",$sxmltxt);
    $xmltxt=simplexml_load_string($sxmltxt);
     
    $nodes = $xmltxt -> xPath('//Cube[@time="2007-08-20"]//Cube');
     
    echo '<pre>';
    foreach( $nodes as $node )
    {
    	echo $node["currency"].' = '.$node['rate'].PHP_EOL;
    }
    et biensur dans test.xml, le contenu du fichier que tu as mis ( l'url ), pense aussi a remplacer la date par la date du jour .

    selon la doc, il y aurait un moyen plus propre de faire via :
    http://fr2.php.net/manual/fr/functio...hNamespace.php
    ( plus propre que de virer les namespaces )

  3. #3
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 31
    Par défaut
    Merci beaucoup je vais fouillé tout ca !!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/12/2011, 04h50
  2. [xml/xsl] Problème de noeuds et attributs
    Par Avallach dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 14/01/2006, 14h31
  3. [DOM] Problème de récuperation de DOM
    Par Oric dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 07/12/2005, 12h53
  4. Réponses: 5
    Dernier message: 22/12/2004, 16h13
  5. [VB.NET][XML] Récupere l'attribut du dernier noeud ds un XML
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/09/2004, 14h14

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