Afin d'extraire les données d'un XML, et les stocker dans une base MySql, je parcours le fichier XML avec SimpleXml.
Ca va plutôt bien, sauf pour une balise dont le nom se répête, et pour laquelle je ne parviens à relever qu'une occurence, malgré une boucle foreach.
Ci dessous une partie du XML :
On voit ici la balise <critere>. Pas de soucis, je récupère tout.<prestations>
<nb-prestations-total>364</nb-prestations-total>
<prestation cle="G|GS024|C933A">
<type-prestataire>G</type-prestataire>
<code-prestataire>GS024</code-prestataire>
<code>C933A</code>
<critere>
<code-critere>GSBNB2</code-critere>
<code-valeur-critere>GWCNB2</code-valeur-critere>
<code-valeur-critere>GSBNB2</code-valeur-critere>
</critere>
<critere>
<code-critere>GSDB3</code-critere>
<code-valeur-critere>G1DWC1</code-valeur-critere>
<code-valeur-critere>GWCB1</code-valeur-critere>
<code-valeur-critere>GSAET</code-valeur-critere>
</critere>
<critere>
<code-critere>GCHAM6</code-critere>
<code-valeur-critere>GCH6L2</code-valeur-critere>
<valeur>1</valeur>
<code-valeur-critere>GCH6ET</code-valeur-critere>
</critere>
<critere>
<code-critere>GCHAM5</code-critere>
<code-valeur-critere>GCH5SP</code-valeur-critere>
<code-valeur-critere>GCH5ET</code-valeur-critere>
</critere>
<critere>
<code-critere>GCHAM4</code-critere>
<code-valeur-critere>GC412P</code-valeur-critere>
<valeur>1</valeur>
<code-valeur-critere>GCH4RS</code-valeur-critere>
</critere>
<critere>
<code-critere>GEQUCU</code-critere>
<code-valeur-critere>GQAVEV</code-valeur-critere>
<code-valeur-critere>GFOURO</code-valeur-critere>
</critere>
<critere>
<code-critere>GEQUSE</code-critere>
<code-valeur-critere>GETEP</code-valeur-critere>
<code-valeur-critere>GESEL</code-valeur-critere>
<code-valeur-critere>GELAL</code-valeur-critere>
<code-valeur-critere>GODVD</code-valeur-critere>
<code-valeur-critere>GEQRTV</code-valeur-critere>
</critere>
</prestation>
</prestations>
Pour la balise <code-valeur-critere>, je ne récupère que la première valeur... Et ca me pèse un peu.
Code :
<?php
$fichier_xml="test_xml.xml";
$xml=simplexml_load_file($fichier_xml);
$variable=$xml->prestation;
foreach($variable as $variable){
$code_prestataire=$variable->{"code-prestataire"};echo"VERIF code_prestataire : ".$code_prestataire."<br>";
$code=$variable->code;echo"VERIF code : ".$code."<br>";
$criteres=$variable->critere;
foreach($criteres as $crit){
$code_critere=$crit ->{"code-critere"};echo "VERIF code_critere : ".$code_critere."<br>";
$code_valeur_critere=$crit->{"code-valeur-critere"};echo "VERIF code_valeur_critere : ".$code_valeur_critere."<br>";
}
echo "<hr>";
}
?>
Extrait du résultat :
En principe, je pensais voir toutes les valeurs de <code-valeur-critere>. Mais non. Uniquement la première. Et je ne vois pas bien comment faire une nouvelle boucle à cet endroit.VERIF code_prestataire : GS024
VERIF code : C933A
VERIF code_critere : GSBNB2
VERIF code_valeur_critere : GWCNB2
VERIF code_critere : GCHNBR
VERIF code_valeur_critere : GCHNB6
VERIF code_critere : GINCVS
VERIF code_valeur_critere : GCHH30
VERIF code_critere : GCAUT
VERIF code_valeur_critere : GCAUTI
VERIF code_critere : GCHARG
VERIF code_valeur_critere : GCHARG
Si quelqu'un pouvait m'orienter, je suis preneur !
Merci.