2017-03-18 26 views
0

儀解析XML GPX數據我有這個GPX文件:使用SimpleXML

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
<gpx xmlns="http://www.topografix.com/GPX/1/1" .. > 
    <metadata> 
     <link href="http://www.garmin.com"> 
      <text>Garmin International</text> 
     </link> 
     <time>2017-03-13T14:42:05Z</time> 
    </metadata> 
    <trk> 
     <name>2017-03-13 15:41:57</name> 
     <extensions> 
      <gpxx:TrackExtension> 
       <gpxx:DisplayColor>Cyan</gpxx:DisplayColor> 
      </gpxx:TrackExtension> 
      <gpxtrkx:TrackStatsExtension> 
       <gpxtrkx:Distance>6482</gpxtrkx:Distance> 
       <gpxtrkx:MovingTime>4474</gpxtrkx:TimerTime> 
      </gpxtrkx:TrackStatsExtension> 
     </extensions> 
     <trkseg> 
      <trkpt lat="47.1075830329" lon="15.4409365822"> 
       <ele>466.49</ele> 
       <time>2017-03-13T13:26:10Z</time> 
      </trkpt> 
      <trkpt lat="47.1075813565" lon="15.4409420304"> 
       <ele>466.49</ele> 
       <time>2017-03-13T13:26:11Z</time> 
      </trkpt> 
      ... 
     </trkseg> 
    </trk> 
</gpx> 

我想用SimpleXML解析它,但必須TrackStatsExtension進不去。 如何循環播放TrackStatsExtension - 獲取Distance和MovingTime?

我想計算平均速度。

回答

2

好吧,我發現了這件事由我自己:

$xml = simplexml_load_file($file); 
$namespaces = $xml->trk->getNamespaces(true); 
$ext = $xml->trk->extensions->children($namespaces['gpxtrkx']); 
$Distance = $ext->TrackStatsExtension->Distance ; 
$MovingTime = $ext->TrackStatsExtension->MovingTime ; 
$Speed = $Distance/$MovingTime * 3.6 ; 

DEFINE ('NL', '<br />') ; 
echo '--------------------' . NL ; 
echo 'Distance : ' . $Distance . ' m' . NL ; 
echo 'MovingTime : ' . $MovingTime . ' s' . NL ; 
echo 'Avg speed : ' . round ($Speed, 2) . ' km/h'. NL ; 
echo '--------------------' . NL ; 
+0

兩件事情你應該知道選擇的命名空間是這樣的:首先,你可以使用命名空間別名,而不是直接調用' - > getNamespaces'通過寫作' - > children('gpxtrkx',true)';其次,如果生成文件的代碼更改爲對同一名稱空間使用不同的別名,則實際上應該對來自'xmlns:gpxtrkx'屬性的完整標識符進行硬編碼。例如'define('XMLNS_GPX_TRKX','http:// ....'); $ ext = $ xml-> trk-> extensions-> children(XMLNS_GPX_TRKX);' – IMSoP