Xml vers tableau php

Résolu/Fermé
Signaler
Messages postés
67
Date d'inscription
lundi 21 décembre 2009
Statut
Membre
Dernière intervention
6 février 2010
-
Messages postés
67
Date d'inscription
lundi 21 décembre 2009
Statut
Membre
Dernière intervention
6 février 2010
-
Bonjour,

Peut on simplifier ce code car si j'ai bien tout compris : il parcourt une première fois pour les puls puis reparcourt pour la vitesse.
Peut on récupérer les puls et la vitesse en 1 fois?
<?php
$dom = new DomDocument;
$dom->load("Log_090717_090008.slf");
// Puls
$listePuls = $dom->getElementsByTagName('Puls');
foreach($listePuls as $puls)
$arraypuls[] = $puls->firstChild->nodeValue;
// Vitesse
$listeVitesse = $dom->getElementsByTagName('Speed');
foreach($listeVitesse as $vitesse)
$arrayvitesses[] = $vitesse->firstChild->nodeValue;
?>

6 réponses

Messages postés
18639
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
23 janvier 2022
4 353
Non, il faudra au moins 2 getElementsByTagName.
0
Messages postés
67
Date d'inscription
lundi 21 décembre 2009
Statut
Membre
Dernière intervention
6 février 2010
7
Donc si j'ai 10 champs à récupérer il me fait 10 getElementsByTagName. On peut pas faire autrement car ça doit utilisé pas mal de ressource serveur?
0
Messages postés
18639
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
23 janvier 2022
4 353
Ça dépends de la structure de ton XML.
0
Messages postés
67
Date d'inscription
lundi 21 décembre 2009
Statut
Membre
Dernière intervention
6 février 2010
7
<?xml version="1.0" encoding="utf-8"?>

<Log>
  <Information>
    <Name><![CDATA[Sortie groupe jambon]]></Name>
    <Notiz/>
    <RadGroesse>2133</RadGroesse>
    <Einheit>kmh</Einheit>
    <Fahrrad>2</Fahrrad>
    <HFMax>205</HFMax>
    <StartZone1>113</StartZone1>
    <StartZone2>144</StartZone2>
    <StartZone3>169</StartZone3>
    <EndeZone3>205</EndeZone3>
    <Kalorien>01918</Kalorien>
    <StartZeit>08:33:51</StartZeit>
    <SamplingRate>5</SamplingRate>
    <StoppZeit>10:39:08</StoppZeit>
    <StartDatum>05.07.09</StartDatum>
    <StoppDatum>05.07.09</StoppDatum>
  </Information>
  <LogEintraege>
    <Eintrag pause="0" wp="0">
      <Pause zeit=""/>
      <Rest zeit=""/>
      <WPTitel/>
      <WPNotiz/>
      <RPLAbs>0</RPLAbs>
      <Speed>38.59</Speed>
      <Puls>117</Puls>
      <Hoehe>40</Hoehe>
      <Temp>22</Temp>
      <Steigung>0</Steigung>
    </Eintrag>
    <Eintrag pause="0" wp="0">
      <Pause zeit=""/>
      <Rest zeit=""/>
      <WPTitel/>
      <WPNotiz/>
      <RPLAbs>23</RPLAbs>
      <Speed>39.56</Speed>
      <Puls>118</Puls>
      <Hoehe>40</Hoehe>
      <Temp>22</Temp>
      <Steigung>0</Steigung>
    </Eintrag>
    <Eintrag pause="0" wp="0">
      <Pause zeit=""/>
      <Rest zeit=""/>
      <WPTitel/>
      <WPNotiz/>
      <RPLAbs>24</RPLAbs>
      <Speed>41.11</Speed>
      <Puls>123</Puls>
      <Hoehe>40</Hoehe>
      <Temp>22</Temp>
      <Steigung>0</Steigung>
    </Eintrag>
    <Eintrag pause="0" wp="0">
      <Pause zeit=""/>
      <Rest zeit=""/>
      <WPTitel/>
      <WPNotiz/>
      <RPLAbs>24</RPLAbs>
      <Speed>41.88</Speed>
      <Puls>132</Puls>
      <Hoehe>40</Hoehe>
      <Temp>22</Temp>
      <Steigung>0</Steigung>
    </Eintrag>
    <Eintrag pause="0" wp="0">
      <Pause zeit=""/>
      <Rest zeit=""/>
      <WPTitel/>
      <WPNotiz/>
      <RPLAbs>24</RPLAbs>
      <Speed>40.53</Speed>
      <Puls>137</Puls>
      <Hoehe>40</Hoehe>
      <Temp>22</Temp>
      <Steigung>0</Steigung>
    </Eintrag>
....
...
...
0
Messages postés
18639
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
23 janvier 2022
4 353
<?php
$dom = new DOMDocument();
$dom->load('fichier.xml');

$LogEintraege = $dom->getElementsByTagName('LogEintraege')->item(0);
$Eintrags = $LogEintraege->childNodes;
foreach($Eintrags as $Eintrag) {
	if($Eintrag->nodeName == 'Eintrag') {
		$infos = $Eintrag->childNodes;
		foreach($infos as $info) {
			if($info != '#text') {
				if(isset(${$info->nodeName}))
					${$info->nodeName}[] .= $info->nodeValue;
				else
					${$info->nodeName}[] = $info->nodeValue;
			}
		}
	}
}
?>
Avec ça, tu as une variable (array) portant le nom de chaque nœuf enfant (balise à l'intérieur) des nœuds "Eintrag".
Par exemple : $Temp , $Steigung , $Puls , ...
0
Messages postés
67
Date d'inscription
lundi 21 décembre 2009
Statut
Membre
Dernière intervention
6 février 2010
7
C'est génial ton truc! Merci
0