Récupérer la valeur d une variable dans une balise xml ?

Petit nouveau ! | 7 Messages

31 janv. 2011, 11:13

Bonjour à tous,

j'ai le fichier xml suivant

Code : Tout sélectionner

<Driver> <Name>Nom Prenom</Name> <CarNumber>4</CarNumber> <TeamName>Ferrari</TeamName> <isPlayer>0</isPlayer> <GridPos>13</GridPos> <Position>13</Position> <Lap num="1" p="9" et="244.4303" s1="45.9353" s2="24.1838" s3="27.1464" fuel="0.408">97.2655</Lap> <Lap num="2" p="7" et="341.6958" s1="34.6579" s2="23.2544" s3="27.2179" fuel="0.400">85.1301</Lap> <Lap num="3" p="7" et="426.8259" s1="32.1466" s2="23.2796" s3="27.7674" fuel="0.392">83.1936</Lap> <BestLapTime>83.1936</BestLapTime> <Laps>10</Laps> <Pitstops>4</Pitstops> <FinishStatus>Finish Normaly</FinishStatus> </Driver>
Je dois stocker les valeurs dans une BDD.
Avec un script php j'arrive a récupérer sans soucis les valeurs contenues entre les balises simple <Name></Name> etc etc, mais je voudrais récupérer aussi les valeurs des variables s1, s2 et s3 qui se trouvent dans la balise <Lap ....>. Et là, je sèche.
Si quelqu'un a une idée...merci

je colle ici le script php qui me sert pour lire puis récupérer les données dans le xml (la fonction n'est pas de moi)

Code : Tout sélectionner

<?php // Fonction parser function parser($fichier,$item,$champs) { // on lit le fichier if($chaine = @implode("",@file($fichier))) { // on explode sur <item> // Dans l'exemple il s'agit de 'profil' $tmp = preg_split("/<\/?".$item.">/",$chaine); // pour chaque <item> donc tous les profils for($i=1;$i<sizeof($tmp)-1;$i+=2) // on lit les champs demandés <champ> donc il s'agit de 'id' et 'prenom' foreach($champs as $champ) { $tmp2 = preg_split("/<\/?".$champ.">/",$tmp[$i]); // on ajoute l'élément au tableau $tmp3[$i-1][] = @$tmp2[1]; } // et on retourne le tableau dans la fonction return $tmp3; } } $xml = parser("test.xml","Driver",array("Name","TeamName","GridPos","Position","BestLapTime","FinishTime","Laps","FinishStatus")); foreach ($xml as $key => $row) { $nom[$key] = $row[0]; $teamnom[$key] = $row[1]; $gridpos[$key] = $row[2]; $position[$key] = $row[3]; $bestlap[$key] = $row[4]; $finishtime[$key] = $row[5]; $laps[$key] = $row[6]; $finishstatus[$key] = $row[7]; } // Tri par ordre d'arrivée. array_multisort($position, SORT_ASC, $xml); // Affichage des données ligne par ligne. foreach($xml as $row) { echo $row[3]." ".$row[0]." ".$row[1]." ".$row[2]." ".$row[4]." ".$row[5]." ".$row[6]." ".$row[7]." "."<br/>"; } ?>

ViPHP
ViPHP | 5462 Messages

31 janv. 2011, 11:26

utilise SimpleXML c'est fait pour tu t'embêtes la

Petit nouveau ! | 7 Messages

31 janv. 2011, 12:53

Merci,
effectivement en faisant comme çà

Code : Tout sélectionner

test.xml: <Driver> <Name>Pascal Salar</Name> <Connected>1</Connected> <VehFile>ICKX_4.VEH</VehFile> <UpgradeCode>0d000000 00000000</UpgradeCode> <VehName>#4 Jacky Ickx F312B</VehName> <CarType>F171</CarType> <CarClass>F171</CarClass> <CarNumber>4</CarNumber> <TeamName>Ferrari</TeamName> <isPlayer>0</isPlayer> <GridPos>13</GridPos> <Position>13</Position> <ClassGridPos>12</ClassGridPos> <ClassPosition>13</ClassPosition> <Points>0</Points> <ClassPoints>0</ClassPoints> <LapRankIncludingDiscos>13</LapRankIncludingDiscos> <Lap num="1" p="9" et="244.4303" s1="45.9353" s2="24.1838" s3="27.1464" fuel="0.408">97.2655</Lap> <Lap num="2" p="7" et="341.6958" s1="34.6579" s2="23.2544" s3="27.2179" fuel="0.400">85.1301</Lap> <Lap num="3" p="7" et="426.8259" s1="32.1466" s2="23.2796" s3="27.7674" fuel="0.392">83.1936</Lap> <BestLapTime>83.0867</BestLapTime> <Laps>10</Laps> <Pitstops>4</Pitstops> <FinishStatus>DQ</FinishStatus> <ControlAndAids startLap="1" endLap="10">PlayerControl,Clutch</ControlAndAids> </Driver> test.lap.php: <?php $Lap = simplexml_load_file("test.xml"); foreach($Lap->Lap[0]->attributes() as $a => $b) { echo $a, '="', $b, "<br/>"; } ?>
J'obtiens mes attributs et leurs valeurs, çà donne
num="1
p="9
et="244.4303
s1="45.9353
s2="24.1838
s3="27.1464
fuel="0.408

pour premier Lap. Pour avoir les autres il me suffit de modifier Lap[0] par Lap[1] ou Lap[2]...

Il me reste à concilier les deux scripts...