I'm trying to load some data in from a GPX file.
The file has been downloaded from Garmin Connect (https://connect.garmin.com) and has a few custom extensions for things like heart rate etc. For some reason simplexml_load_file()
is skipping the extensions and failing to register the namespaces for them.
To be clear, there are two things missing. Most importantly the ns3:*
elements are all missing from the output.
<?xml version="1.0" encoding="UTF-8"?>
<gpx creator="Garmin Connect" version="1.1"
xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/11.xsd"
xmlns:ns3="http://www.garmin.com/xmlschemas/TrackPointExtension/v1"
xmlns="http://www.topografix.com/GPX/1/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://www.garmin.com/xmlschemas/GpxExtensions/v3"
>
<metadata>
<link href="connect.garmin.com">
<text>Garmin Connect</text>
</link>
<time>2018-07-06T14:53:04.000Z</time>
</metadata>
<trk>
<name>Stripped</name>
<type>cycling</type>
<trkseg>
<trkpt lat="35.4119682700932025909423828125" lon="-2.3132956029832363128662109375">
<ele>51.21000152587890625</ele>
<time>2018-07-06T14:53:04.000Z</time>
<extensions>
<ns3:TrackPointExtension>
<ns3:atemp>28.0</ns3:atemp>
<ns3:hr>113</ns3:hr>
</ns3:TrackPointExtension>
</extensions>
</trkpt>
</trkseg>
</trk>
</gpx>
Really simple code:
$foo = simplexml_load_file("test.xml");
print_r($foo->getNamespaces());
print_r($foo);
Produces this:
Array
(
[] => http://www.topografix.com/GPX/1/1
[xsi] => http://www.w3.org/2001/XMLSchema-instance
#### Missing namespaces here ####
)
SimpleXMLElement Object
(
[@attributes] => Array
(
[creator] => Garmin Connect
[version] => 1.1
)
[metadata] => SimpleXMLElement Object
(
[link] => SimpleXMLElement Object
(
[@attributes] => Array
(
[href] => connect.garmin.com
)
[text] => Garmin Connect
)
[time] => 2018-07-06T14:53:04.000Z
)
[trk] => SimpleXMLElement Object
(
[name] => Stripped
[type] => cycling
[trkseg] => SimpleXMLElement Object
(
[trkpt] => SimpleXMLElement Object
(
[@attributes] => Array
(
[lat] => 35.4119682700932025909423828125
[lon] => -2.3132956029832363128662109375
)
[ele] => 56.40000152587890625
[time] => 2018-07-06T14:53:04.000Z
[extensions] => SimpleXMLElement Object
(
##### Missing extensions here #####
)
)
)
)