Bonjour à tous.
Je ne parviens pas à extraire toutes les variables d'un fichier xml, dont les noms de balises se répètent, et ce malgré une boucle "foreach".
Ci-dessous un extrait du fichier XML qui est en réalité beaucoup plus long mais de forme récurrente :
<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 afficher, et stocker dans une base de données les variables "code-critere" et "code-valeur-critere", j'ai fait le programme suivant en php :
<?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>";
foreach ($variable->critere->{'code-critere'} as $crit) {
$code_critere=$crit;
echo"VERIF code_critere : ".$code_critere."<br>";
}
foreach ($variable->critere->{'code-valeur-critere'} as $crit) {
$code_valeur_critere=$crit;
echo"VERIF code_valeur_critere : ".$code_valeur_critere."<br>";
}
echo"<hr>";
}
?>
Ce programme fonctionne, mais ne me donne que les valeurs de la première occurence de <critere>, pas les autres. Pourtant avec une boucle "foreach", il devrait lire l'ensemble du XML...
Voici le résultat dans le navigateur :
VERIF code_prestataire : GS024
VERIF code : C933A
VERIF code_critere : GSBNB2
VERIF code_valeur_critere : GWCNB2
VERIF code_valeur_critere : GSBNB2
VERIF code_prestataire : G0009
VERIF code : A100A
VERIF code_critere : GNOTE2
VERIF code_valeur_critere : GLINGE
... et voilà... il liste les "code-valeur-critere" du premier <critere> et s'arrête là...
Quelqu'un aurait-il-une idée ? Ca fait un moment que je galère là dessus...
David.
Je ne parviens pas à extraire toutes les variables d'un fichier xml, dont les noms de balises se répètent, et ce malgré une boucle "foreach".
Ci-dessous un extrait du fichier XML qui est en réalité beaucoup plus long mais de forme récurrente :
<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 afficher, et stocker dans une base de données les variables "code-critere" et "code-valeur-critere", j'ai fait le programme suivant en php :
<?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>";
foreach ($variable->critere->{'code-critere'} as $crit) {
$code_critere=$crit;
echo"VERIF code_critere : ".$code_critere."<br>";
}
foreach ($variable->critere->{'code-valeur-critere'} as $crit) {
$code_valeur_critere=$crit;
echo"VERIF code_valeur_critere : ".$code_valeur_critere."<br>";
}
echo"<hr>";
}
?>
Ce programme fonctionne, mais ne me donne que les valeurs de la première occurence de <critere>, pas les autres. Pourtant avec une boucle "foreach", il devrait lire l'ensemble du XML...
Voici le résultat dans le navigateur :
VERIF code_prestataire : GS024
VERIF code : C933A
VERIF code_critere : GSBNB2
VERIF code_valeur_critere : GWCNB2
VERIF code_valeur_critere : GSBNB2
VERIF code_prestataire : G0009
VERIF code : A100A
VERIF code_critere : GNOTE2
VERIF code_valeur_critere : GLINGE
... et voilà... il liste les "code-valeur-critere" du premier <critere> et s'arrête là...
Quelqu'un aurait-il-une idée ? Ca fait un moment que je galère là dessus...
David.