I have a little problem.
I load a XML file using $xml = simplexml_load_file($path);
, and after that I display it using print_r($xml);
.
As a result I get this:
SimpleXMLElement Object
(
[trk] => SimpleXMLElement Object
(
[name] => GraphHopper Track
[trkseg] => SimpleXMLElement Object
(
[trkpt] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[lat] => 44.847241
[lon] => 20.46966
)
[ele] => 69.6
[time] => 2017-09-08T09:42:44Z
)
[1] => SimpleXMLElement Object
(
[@attributes] => Array
(
[lat] => 44.847439
[lon] => 20.46906
)
[ele] => 69.6
[time] => 2017-09-08T09:42:56Z
)
)
)
)
)
How can I extract [lat]
, [lon]
and [time]
tags from XML using a foreach loop in PHP?
Actual XML file:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="Graphhopper version 0.10" version="1.1" xmlns:gh="https://graphhopper.com/public/schema/gpx/1.1">
<metadata><copyright author="OpenStreetMap contributors"/><link href="http://graphhopper.com"><text>GraphHopper GPX</text></link><time>2017-09-08T09:42:44Z</time></metadata>
<trk><name>GraphHopper Track</name><trkseg>
<trkpt lat="44.847241" lon="20.46966"><ele>69.6</ele><time>2017-09-08T09:42:44Z</time></trkpt>
<trkpt lat="44.847439" lon="20.46906"><ele>69.6</ele><time>2017-09-08T09:42:56Z</time></trkpt>
</trkseg>
</trk>
</gpx>
Per your XML structure this should do it:
foreach($sxml->trk->trkseg->trkpt as $data) {
echo $data['lat'] . PHP_EOL . $data['lon'] . PHP_EOL . $data->time . PHP_EOL;
}
enter each level with ->
. The lat
and lon
are attributes so use the []
s there.
Demo: https://3v4l.org/oNLSg