Spring naar bijdragen

Aanbevolen berichten

Geplaatst

Hoi,

 

Ik weet dat er heel wat enthousiaste programmeurs op het forum zijn, dus het volgende.

Diverse zoekakties op het forum en in google leveren mij geen werkbaar antwoord op voor het volgende.

 

Ik wil een PQ GPX bestandje via PHP uitlezen. Het uiteindelijke doel is om de pocketquery volautomatisch uit Gmail op te halen en vervolgens de MySQL database van de website te update. Zover is het nog niet; de eerste stap is om te proberen om de GPX goed te kunnen lezen.

 

Een GPX bestand is in XML formaat en het uitlezen van de normale tags levert geen problemen op. Maar er wordt ook gebruik gemaakt van een namespace:Groundspeak voor specifieke geocache-informatie. Volgens de PHP documentatie zou het volgende moeten gebeuren:

 

<?php

// De GPX file wordt ingelezen:

$xmlfeed=simplexml_load_file('415113.gpx');

 

// Loop door alle waypoints <wpt> in de GPX file

foreach($xmlfeed->wpt as $twpt){

$tlon = $twpt->lon; // longitude

$tlat = $twpt->lat; // latitude

$tname = $twpt->name; // GC code

$turlname = $twpt->urlname; // cachenaam

$ttype = $twpt->type; // cache type

 

// lees de groundspeak specifiek variabelen

// namespace wordt gedefinieerd voor alle tags die beginnen met groundspeak:

// deze tags worden vervolgens als childeren uitgelezen

 

$ns_gs = $twpt->children("http://www.groundspeak.com/cache/1/0");

// even echo naar de browser om te kijken of het werkt

echo $ns_gs->placed_by.'</br>';

echo $ns_gs->terrain.'</br>';

}

?>

 

Helaas werkt het bovenstaande niet.

Heeft iemand een suggestie, en nee ik wil het niet via GSAK doen.

 

Groet,

Frits

Geplaatst
Helaas werkt het bovenstaande niet.

 

Als er iets is waar een enthousiaste programmeur een hekel aan heeft is het de opmerking: "Het werkt niet" Vertel a.u.b. wat er niet werkt, wat je ziet, en wat je verwacht.

 

$tlon = $twpt->lon; // longitude

 

Houd er rekening mee dat dit geen string maar een SimpleXML object is. met: $tlon = (string)$twpt->lon krijg je wel een string.

 

Tc

Geplaatst (bewerkt)
Als er iets is waar een enthousiaste programmeur een hekel aan heeft is het de opmerking: "Het werkt niet" Vertel a.u.b. wat er niet werkt, wat je ziet, en wat je verwacht.

Ik zal het proberen wat duidelijke te omschrijven:

 

In het eerste deel zitten niet de problemen. De normale tags, zonder de prefix Groundspreak zijn goed uit te lezen en als ik die naar het scherm echo, dan zie ik keurig de waarde van die tags.

Het probleem zit vooral in het tweede deel; het uitlezen van de tags die binnen de namespace 'groundspeak' vallen.

Dus in het deel:

$ns_gs = $twpt->children("http://www.groundspeak.com/cache/1/0");

// even echo naar de browser om te kijken of het werkt

echo $ns_gs->placed_by.'</br>';

echo $ns_gs->terrain.'</br>';

 

De tags heb ik even als voorbeeld genomen. Bij het uitvoeren van het scriptje worden alleen lege linebreaks gegenereerd. Het lijkt er dus op dat de variabelen $ns_gs->placed_by en $ns_ga->terrain geen waarde krijgen maar wel de </br> wordt ge-echood.

 

Even ter referentie een stukje uit de GPX file. Het vette stukje zijn dus de tags waar het om gaat...

 

<?xml version="1.0" encoding="utf-8"?>

<gpx xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" creator="Groundspeak Pocket Query" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.groundspeak.com/cache/1/0 http://www.groundspeak.com/cache/1/0/cache.xsd" xmlns="http://www.topografix.com/GPX/1/0">

<name>My Finds Pocket Query</name>

<desc>Geocache file generated by Groundspeak</desc>

<author>Groundspeak</author>

<email>contact@groundspeak.com</email>

<time>2009-01-31T13:27:35.8067868-08:00</time>

<keywords>cache, geocache, groundspeak</keywords>

<bounds minlat="-63.319333" minlon="-157.862217" maxlat="61.213467" maxlon="145.467833" />

<wpt lat="38.88925" lon="-77.05035">

<time>2001-07-01T00:00:00.0000000-07:00</time>

<name>GCEB2</name>

<desc>The view of an "Honest Man" by wv-explorers, Virtual Cache (1/1)</desc>

<url>http://www.geocaching.com/seek/cache_details.aspx?guid=dbc648ba-4246-406d-bc58-ff483140a4f2</url>

<urlname>The view of an "Honest Man"</urlname>

<sym>Geocache Found</sym>

<type>Geocache|Virtual Cache</type>

<groundspeak:cache id="3762" available="True" archived="False" xmlns:groundspeak="http://www.groundspeak.com/cache/1/0">

<groundspeak:name>The view of an "Honest Man"</groundspeak:name>

<groundspeak:placed_by>wv-explorers</groundspeak:placed_by>

</wpt>

bewerkt door Boswijk Posse
Geplaatst

Halleluja. Via een paar uur omzwervingen is het opgelost _0_ .

 

<?php
// De GPX file wordt ingelezen:
$xmlfeed=simplexml_load_file('415113.gpx');

// Loop door alle waypoints <wpt> in de GPX file
foreach($xmlfeed->wpt as $twpt){
$tlon = $twpt->lon; // longitude
$tlat = $twpt->lat; // latitude
$tname = $twpt->name; // GC code
$turlname = $twpt->urlname; // cachenaam
$ttype = $twpt->type; // cache type

// lees de groundspeak specifiek variabelen
// namespace wordt gedefinieerd voor alle tags die beginnen met groundspeak:
// deze tags worden vervolgens als childeren uitgelezen

$wptXML = simplexml_load_string($twpt->asXML());
$groundspeak = $wptXML->children("http://www.groundspeak.com/cache/1/0");

// even echo naar de browser om te kijken of het werkt
echo $groundspeak->cache->placed_by.'</br>';
echo $groundspeak->cache->terrain.'</br>';
}
?>

Hoe simpel kan het zijn :crybaby:

Geplaatst
Halleluja. Via een paar uur omzwervingen is het opgelost _0_ .

 

Hoe simpel kan het zijn :crybaby:

 

Hoezo Gpsgek ? Het is ook XMLgek en PHPgek !

Wat 1 extra regeltje al niet kan doen!

 

XMLgek, bedankt. Ik kan weer lekker doorstoeien. Bij de volgende cacheafspraak zal er een groot glas Belgisch Bier genuttigd worden :crybaby:

  • Onlangs hier   0 leden

    • Er kijken geen geregistreerde gebruikers naar deze pagina.
×
×
  • Nieuwe aanmaken...