Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/08/2007, 09h42   #1
Futur Membre du Club
 
Inscription : juin 2005
Messages : 31
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 31
Points : 15
Points : 15
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 :
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 :
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 :
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.
mitchb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 16h17   #2
Membre du Club
 
Inscription : juillet 2006
Messages : 66
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2006
Messages : 66
Points : 50
Points : 50
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 :
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 )
Finidrigoler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 12h43   #3
Futur Membre du Club
 
Inscription : juin 2005
Messages : 31
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 31
Points : 15
Points : 15
Merci beaucoup je vais fouillé tout ca !!
mitchb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h17.


 
 
 
 
Partenaires

Hébergement Web