sources:
display data from XML using php simplexml
Get attributes and values using SimpleXML
i am trying to work with the simpleXML for php but cant get it to work
my xml sample
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx creator="Ski Tracks 1.3.3" version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/0" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
<metadata>
<link href="http://www.corecoders.com">
<text>Core Coders Ltd</text>
</link>
<time>2012-11-15T13:52:46.005+01:00</time>
<bounds maxlat="52.0502500" maxlon="5.6405950" minlat="52.0498680" minlon="5.6387020"/>
</metadata>
<trk>
<name>New Track Doe Maar</name>
<desc>Yeah</desc>
<type>snowboarding</type>
<trkseg>
<trkpt lat="52.0499970" lon="5.6387520">
<ele>3.00</ele>
<time>2012-11-15T13:42:17.380+01:00</time>
</trkpt>
<trkpt lat="52.0499510" lon="5.6388820">
<ele>3.00</ele>
<time>2012-11-15T13:43:32.433+01:00</time>
</trkpt
</trkpt>
</trkseg>
</trk>
</gpx>
i want to retrieve the 'trkpt' attributes and their children like 'time' and 'ele' and i want to put the trkpt 'lat'/'lon', 'time' and 'ele' elements in an array. i just dont get it to work this piece is working fine now and gets the metadata info
$xml = simplexml_load_file("./data/ski1/skitrack.xml");
//$url = './data/ski1/skitrack.xml';
//$xml = new SimpleXmlElement($url, null, true);
$time = $xml->metadata[0]->time;
$name = $xml->trk->name;
$desc = $xml->trk->desc;
$type = $xml->trk->type;
foreach ($xml->metadata[0]->bounds as $bounds) {
$maxlat = $bounds->attributes()->maxlat;
$maxlon = $bounds->attributes()->maxlon;
$minlat = $bounds->attributes()->minlat;
$minlon = $bounds->attributes()->minlon;
}
but when i try it for the trkpt it gives me an error that there is no array: Invalid argument supplied for foreach
print_r($xml);
foreach ($xml->trkseg->trkpt as $trkpt) {
$lon = $trkpt->attributes()->lon;
}
i am actually trying to translate a code from javascript to php and it works just fine in javascr
var alat = new Array();
var alon = new Array();
var ele = new Array();
var year = new Array();
var month = new Array();
var day = new Array();
var hours = new Array();
var minutes = new Array();
var seconds = new Array();
var milisec = new Array();
$(xml).find('trkseg').each(function(){
$(this).find('trkpt').each(function(i){
alat[i] = $(this).attr('lat');
alon[i] = $(this).attr('lon');
ele[i] = $(this).find('ele').text();
year[i] = $(this).find('time').text().substr(0,4);
month[i] = $(this).find('time').text().substr(5,2);
day[i] = $(this).find('time').text().substr(8,2);
hours[i] = $(this).find('time').text().substr(11,2);
minutes[i] = $(this).find('time').text().substr(14,2);
seconds[i] = $(this).find('time').text().substr(17,2);
milisec[i] = $(this).find('time').text().substr(20,3);
if(i > 0) {
var laterdate = new Date(year[i],month[i],day[i],hours[i],minutes[i],seconds[i],milisec[i]);
var earlierdate = new Date(year[i-1],month[i-1],day[i-1],hours[i-1],minutes[i-1],seconds[i-1],milisec[i-1]);
locDistance(alat[i-1], alon[i-1], alat[i], alon[i]);
timeDifference(laterdate,earlierdate);
}
$('.content').append(i);
$('.content').append(
'<br />lat ' + alat[i] +
'<br />' + 'lon ' + alon[i] +
'<br / >' + 'ele ' + ele[i] +
'<br / >' + 'time ' + year[i] + (month[i]-1) + day[i] + hours[i] + minutes[i] + seconds[i] + milisec[i] +
'<br / >' + 'dist ' + d + '<br / >'
);
i = i + 1;
});
});
thank you in advance