我有xml / gpx文件:
<?xml version="1.0" encoding="utf-8"?>
<gpx xsi:schemaLocation="http://www.topografix.com/GPX/1/1">
<metadata>
....
</metadata>
<trk>
<trkseg>
<trkpt lat="50.04551333333333" lon="14.434101666666667">
<ele>282</ele>
<time>2014-06-30T20:56:03.92</time>
<extensions>
<gpxtpx:TrackPointExtension>
<gpxtpx:hr>100</gpxtpx:hr>
</gpxtpx:TrackPointExtension>
</extensions>
</trkpt>
...
</gpx>
加载:
$xml=simplexml_load_file($gpx_file);
解析女巫
foreach($xml->trk->trkseg->trkpt as $point){}
很好。但是我无法获得/ extension // extension /
的内容print_r($ point)是
SimpleXMLElement Object
(
[@attributes] => Array
(
[lat] => 50.04527
[lon] => 14.433993333333333
)
[ele] => 280.5
[time] => 2014-06-30T20:57:21.71
[extensions] => SimpleXMLElement Object
(
)
)
我无法获得SimpleXMLElement对象。
Print_r($ point-&gt;扩展名为:
SimpleXMLElement Object
(
)
我尝试Converting a SimpleXML Object to an Array和其他类似的方式,但我失败了 - 输出是空数组。
进入字符串/数组的任何想法/方式?
样本gpx位于www.vovcinec.net/gpx/e.gpx(~700kB)
答案 0 :(得分:3)
您无法直接获取它们,因为它们位于命名空间中,您需要先使用getNamespaces()
方法。考虑这个例子:
$xml = simplexml_load_file('e.gpx');
foreach($xml->trk->trkseg->trkpt as $trkpt) {
$namespaces = $trkpt->getNamespaces(true);
$gpxtpx = $trkpt->extensions->children($namespaces['gpxtpx']);
$hr = (string) $gpxtpx->TrackPointExtension->hr;
echo '<pre>';
print_r($hr);
echo '</pre>';
}
答案 1 :(得分:0)
我希望你能帮助我们关注代码
foreach($gpx->trk->trkseg->children() as $trkpts) {
echo (string)$trkpts->extensions->children('gpxtpx',true)->TrackPointExtension->hr;
}
无需使用getNamespaces()
方法