Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用SimpleXML解析Garmin GPX XML数据_Php_Xml_Simplexml_Gpx - Fatal编程技术网

Php 使用SimpleXML解析Garmin GPX XML数据

Php 使用SimpleXML解析Garmin GPX XML数据,php,xml,simplexml,gpx,Php,Xml,Simplexml,Gpx,我有这个GPX文件: <?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<

我有这个GPX文件:

<?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>

佳明国际
2017-03-13T14:42:05Z
2017-03-13 15:41:57
青色
6482
4474
466.49
2017-03-13T13:26:10Z
466.49
2017-03-13T13:26:11Z
...
我想用SimpleXML解析它,但无法访问TrackStatExtension。 我如何在TrackStatExtension中循环以获得距离和移动时间


我想计算平均速度。

好的,我自己找到的:

$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 ;
$xml=simplexml\u load\u文件($file);
$namespaces=$xml->trk->getNamespaces(true);
$ext=$xml->trk->extensions->children($namespaces['gpxtrkx']);
$Distance=$ext->trackstatextension->Distance;
$MovingTime=$ext->trackstatextension->MovingTime;
$Speed=$Distance/$MovingTime*3.6;
定义('NL','
'); 回音'-------------'。NL; 回声“距离:”$距离。”m’。NL; 回显“MovingTime:”$电影时间。”s'。NL; 回声“平均速度:”。轮($Speed,2)。'公里/小时'。NL; 回音'-------------'。NL;
好的,我自己发现的:

$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 ;
$xml=simplexml\u load\u文件($file);
$namespaces=$xml->trk->getNamespaces(true);
$ext=$xml->trk->extensions->children($namespaces['gpxtrkx']);
$Distance=$ext->trackstatextension->Distance;
$MovingTime=$ext->trackstatextension->MovingTime;
$Speed=$Distance/$MovingTime*3.6;
定义('NL','
'); 回音'-------------'。NL; 回声“距离:”$距离。”m’。NL; 回显“MovingTime:”$电影时间。”s'。NL; 回声“平均速度:”。轮($Speed,2)。'公里/小时'。NL; 回音'-------------'。NL;
您有一个简单的错误:

<gpxtrkx:MovingTime>4474</gpxtrkx:TimerTime>
4474

4474
您也可以使用:

<gpxtrkx:MovingTime>4474</gpxtrkx:MovingTime>
<gpxtrkx:TimerTime>4474</gpxtrkx:TimerTime>
<gpxtrkx:TotalElapsedTime>4474</gpxtrkx:TotalElapsedTime>
4474
4474
4474

您有一个简单的错误:

<gpxtrkx:MovingTime>4474</gpxtrkx:TimerTime>
4474

4474
您也可以使用:

<gpxtrkx:MovingTime>4474</gpxtrkx:MovingTime>
<gpxtrkx:TimerTime>4474</gpxtrkx:TimerTime>
<gpxtrkx:TotalElapsedTime>4474</gpxtrkx:TotalElapsedTime>
4474
4474
4474

关于以这种方式选择名称空间,您应该知道两件事:首先,您可以直接使用名称空间别名,而不是通过编写
->children('gpxtrkx',true)
来调用
->getNamespaces
;其次,实际上应该从
xmlns:gpxtrkx
属性硬编码完整标识符,以防生成文件的代码更改为对同一名称空间使用不同的别名。e、 g.
define('XMLNS\u GPX\u TRKX','http://....'); $ext=$xml->trk->extensions->children(XMLNS\u GPX\u TRKX)
关于以这种方式选择名称空间,您应该知道两件事:首先,您可以直接使用名称空间别名,而不是通过编写
->children('gpxtrkx',true)
来调用
->getNamespaces
;其次,实际上应该从
xmlns:gpxtrkx
属性硬编码完整标识符,以防生成文件的代码更改为对同一名称空间使用不同的别名。e、 g.
define('XMLNS\u GPX\u TRKX','http://....'); $ext=$xml->trk->extensions->children(XMLNS\u GPX\u TRKX)