Bonjour,

Dans un de mes scripts, j'utilise simple XML afin de parser un fichier xml qui n'est autre qu'un fichier GPX (fichier d'un gps).

Dans cet xml, plusieurs données sont accessibles comme la longitude, la latitude, l'altitude, la date et l'heure du point gps)

Voilà comment je procède :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
	// fonction qui convertit un objet php en tableau associatif
	function ToArray($data)
	{
	  if (is_object($data)) $data = get_object_vars($data);
	  return (is_array($data)) ? array_map(__FUNCTION__,$data) : $data;
	}
	$racine=$_SERVER['DOCUMENT_ROOT'];
 
	$xml = $racine.'/php/gpx/fichiers/'.$nom_gpx;
	$i = 0;
 
	// je convertis le GPX, format dérivé du XML, en objet php
	$obj = simplexml_load_file($xml);
	// je convertis l'objet php en tableau
	$array = ToArray($obj);
	// je crée un tableau vide qui contiendra tous mes points avec les attributs lat, lon, ele, time
	$my_pts = array();;
	//je démarre du noeud trkpt
	$array_pts = $array['trk']['trkseg']['trkpt'];
	//je parcours chaque élément du tableau array_pts
	foreach($array_pts as $keys => $values){
		/*
		$my_pt : tableau associatif provisoire	
		*/
		unset($my_pt);
		$my_pt['lon'] = $values['@attributes']['lon'];
		$my_pt['lat'] = $values['@attributes']['lat'];
		$my_pt['ele'] = $values['ele'];
		$my_pt['time'] = $values['time'];
		$my_pts[] = $my_pt;
		$i++;
	}
	echo'<pre>';
	print_r($my_pts);
	echo'</pre>'; 
 
 
	foreach($my_pts as $keys => $pt)
	{
		//retour de la date
		$date = strftime("%Y-%m-%d %H:%M:%S",strtotime($pt['time']));	
		$sql_insertion = $bdd->prepare('INSERT INTO pts_gpx (lon,lat,ele,date,id_balade)VALUES(:lon,:lat,:elevation,:date,:id_balade)');	
		$sql_insertion->execute(array(
						':lon' => $pt['lon'],
						':lat' => $pt['lat'],
						':elevation' => $pt['ele'],
						':date' => $date,
						':id_balade' => $id_balade
		));
	}
Exemple de fichier gpx :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="MapSource 6.15.4" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
 
  <metadata>
    <link href="http://www.garmin.com">
      <text>Garmin International</text>
    </link>
    <time>2011-07-26T19:19:10Z</time>
    <bounds maxlat="47.0313850" maxlon="6.0319950" minlat="46.9651310" minlon="5.9490590"/>
  </metadata>
 
  <trk>
    <name>2011-07-24 51000</name>
    <extensions>
      <gpxx:TrackExtension xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
        <gpxx:DisplayColor>White</gpxx:DisplayColor>
      </gpxx:TrackExtension>
    </extensions>
    <trkseg>
      <trkpt lat="47.0076490" lon="6.0294400">
        <ele>404.3700000</ele>
        <time>2011-07-24T08:24:35Z</time>
      </trkpt>
      <trkpt lat="47.0076670" lon="6.0294410">
        <ele>408.2200000</ele>
        <time>2011-07-24T08:25:02Z</time>
      </trkpt>
      <trkpt lat="47.0076640" lon="6.0294410">
        <ele>412.5400000</ele>
        <time>2011-07-24T08:25:03Z</time>
      </trkpt>
      <trkpt lat="47.0076630" lon="6.0294410">
        <ele>416.3900000</ele>
        <time>2011-07-24T08:25:04Z</time>
      </trkpt>

malheureusement ce process fait méchament ramer mon hébergeur et parfois le "parsage" n'est pas bon et ne semble pas récupérer les bonnes valeurs.

par avance merci pour votre aide.