Parser un flux XML en PHP pour récupérer une valeur


milkiway
WRInaute accro
WRInaute accro
 
Messages: 4910
Inscription: 3 Fév 2004

Parser un flux XML en PHP pour récupérer une valeur

Message le Jeu Fév 10, 2011 18:05

Bonjour,

J'ai un flux XML que je veux parser en PHP. J'utilise simplexml_load_file.
Code: Tout sélectionner
<?xml version="1.0" encoding="UTF-8"?>
<catalogue id="1">
<progname>Panzani</progname>
<store>
  <name>Panzani Pasta</name>
  <products>
   <product>
    <storeData>
     <data type="modele">Farfale</data>
     <data type="prix_catalogue">3.35</data>
    </storeData>
  </product>
  </products>
</store>
</catalogue>

J'arrive sans souci à récupérer la valeur de "progname" (Panzani ici), store->name mais je ne vois pas du tout comment récupérer la donnée Farfale par exemple.
J'ai testé par store->products->product->storeData->data['modele'] mais ça ne marche pas. Pourquoi ? Comment faire ?

Un grand merci


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Parser un flux XML en PHP pour récupérer une valeur

Message le Jeu Fév 10, 2011 19:12

Code: Tout sélectionner

<?php 
$string 
= <<<EOT
<?xml version="1.0" encoding="UTF-8"?>
<catalogue id="1">
<progname>Panzani</progname>
<store>
  <name>Panzani Pasta</name>
  <products>
   <product>
    <storeData>
     <data type="modele">Farfale</data>
     <data type="prix_catalogue">3.35</data>
    </storeData>
  </product>
  </products>
</store>
</catalogue>
EOT;
$xml = simplexml_load_string($string);
$data = (string) $xml->store->products->product->storeData->data[0];

echo $data;
?>

http://codepad.org/ohKMRETR


milkiway
WRInaute accro
WRInaute accro
 
Messages: 4910
Inscription: 3 Fév 2004

Re: Parser un flux XML en PHP pour récupérer une valeur

Message le Jeu Fév 10, 2011 19:18

Merci beaucoup, en fait par ce biais là j'y arrivais bien mais ce n'est pas très sur dans le sens où je en suis pas certain que 0 soit bien pour modèle (il suffit qu'il change de place).
J'ai donc fait autrement :
foreach($flux->store->products->product as $product){
foreach ($product->storeData->data as $node) {
$data[(string) $node['type']] = (string) $node;
}
Fourni sur un autre forum.


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Parser un flux XML en PHP pour récupérer une valeur

Message le Jeu Fév 10, 2011 19:52

Avec SimpleXML et Xpath
Code: Tout sélectionner

<?php 
$string 
= <<<EOT
<?xml version="1.0" encoding="UTF-8"?>
<catalogue id="1">
<progname>Panzani</progname>
<store>
  <name>Panzani Pasta</name>
  <products>
   <product>
    <storeData>
     <data type="modele">Farfale</data>
     <data type="prix_catalogue">3.35</data>
    </storeData>
  </product>
  </products>
</store>
</catalogue>
EOT;
$xml simplexml_load_string($string);
$modele $xml->xpath('/catalogue/store/products/product/storeData/data[@type = "modele"]');
$prix_catalogue $xml->xpath('/catalogue/store/products/product/storeData/data[@type = "prix_catalogue"]');

$modele = (string) $modele[0];
$prix_catalogue = (string) $prix_catalogue[0];

echo 
$modele.'<br />';
echo 
$prix_catalogue;
?>


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités