Aide - Recherche - Membres - Calendrier
Version complète : [XML] Parser un fichier XML - SimpleXML
Forum Développeur - Administration serveur, programmation et base de données > Programmation > XML et XSL
Pepe67
Bonjour à tous,

je suis débutant en XML et je dois pouvoir parser un document XML que l'on ma donné, le voici :

Code


<?xml version="1.0" encoding="UTF-8" ?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="08-11-2005" NAME="FileMaker Pro" VERSION="8.0v1"/>
<DATABASE DATEFORMAT="D/m/yyyy" LAYOUT="" NAME="RANGES" RECORDS="54" TIMEFORMAT="k:mm:ss "/>
<METADATA>
 <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="range_id" TYPE="NUMBER"/>
 <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Libellé gamme" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="5">
<ROW MODID="51" RECORDID="1">
 <COL>
  <DATA>1</DATA>
 </COL>
 <COL>
  <DATA>DD ICE</DATA>
 </COL>
</ROW>
<ROW MODID="51" RECORDID="2">
 <COL>
  <DATA>2</DATA>
 </COL>
 <COL>
  <DATA>DD AluICE</DATA>
 </COL>
</ROW>
<ROW MODID="51" RECORDID="3">
 <COL>
  <DATA>3</DATA>
 </COL>
 <COL>
  <DATA>DD Silverdrive</DATA>
 </COL>
</ROW>
<ROW MODID="52" RECORDID="4">
 <COL>
  <DATA>4</DATA>
 </COL>
 <COL>
  <DATA>DD FireRack</DATA>
 </COL>
</ROW>
<ROW MODID="51" RECORDID="5">
 <COL>
  <DATA>5</DATA>
 </COL>
 <COL>
  <DATA>DD Cryptodisk</DATA>
 </COL>
</ROW>
    </RESULTSET>
</FMPXMLRESULT>


Mon fichier PHP pour le parser doit ressembler plus ou moins à ça mais je comprends pas grand chose icon_redface.gif (c'est un fichier qui traite un autre document XML que celui ou j'ai copié le code)

Code

<?
 $xml_file = 'test.xml';
 
 if ( is_file($xml_file) ) {
   
   if ($FMPDSORESULT = simplexml_load_file($xml_file)) {
     
     foreach($FMPDSORESULT->product as $product) {
     $product_id      = intval($product->id);
     $product_type     = $product->type;
     $product_capacity   = $product->capacity;
     $product_stock     = $product->stock;
     $product_prices    = $product->prices;
     $product_prices_array = array();
     foreach ($product_prices->price as $price) {
      $product_prices_array[] = array(
       'cat'   => $price['cat'],
       'price'  => $price
      );
     }

     echo "<br><br>product_id : $product_id";
     echo "<br>product_type : $product_type";
     echo "<br>product_capacity : $product_capacity";
     echo "<br>product_stock : $product_stock";
     echo "<br>product_prices : ";
     for ($i=0; $i<count($product_prices_array); $i++) {
      echo $product_prices_array[$i]['cat'] . ":" . $product_prices_array[$i]['price'] . " ";
     }
    }
   }
   else {
     echo "Le fichier XML spécifié ($xml_file) semble mal formaté.";  
   }
 }
 else {
   echo "Le fichier XML spécifié ($xml_file) n'a pas été trouvé .";  
 }
     
?>


Si vous avez une méthode plus facile libre à vous, si qq pouvait m'apporter de l'aide svp ce serait super sympa smile.gif
codesign
Salut,

je te conseil d'aller voir ça : http://www.codesign.fr/makingof/annuaire-preventionniste/6

Tu auras notemment un lien vers la doc de SimpleXML, première chose à lire si tu souhaites débrouiller tes soucis avec PHP et le XML.

Bonne lecture wink.gif
Pepe67
Ben en faite avec un XML simple de type :

Code

<products>
<product>
 <id>1</id>
 <type>Aluice</type>
 <capacity>250 G0</capacity>
 <stock>25</stock>
</product>
</products>


j'y arrive, mais avec celui que j'ai en haut je comprend pas comment faire
Pepe67
Je vois que tu a l'air de maitriser le XML si tu savais m'aider ^^ Je voudrais afficher sous la forme :

ID : 'numero de l'id'
Libelle : 'libelle'
Pepe67
C'est bon trouvé avec l'aide d'un ami :

Code

$file = "XMLResult-laBonne.xml";
if (file_exists($file)) {
$xml = simplexml_load_file($file);

foreach ($xml->RESULTSET->ROW as $row) {
 $id   = $row->COL[0]->DATA;
 $libelle = $row->COL[1]->DATA;
 echo "id : ".$id." libellé : ".$libelle."<br />";
}  
}


Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.