Boswijk Posse Geplaatst 25 februari 2009 Geplaatst 25 februari 2009 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
technetium Geplaatst 25 februari 2009 Geplaatst 25 februari 2009 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
Boswijk Posse Geplaatst 25 februari 2009 Auteur Geplaatst 25 februari 2009 (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> 25 februari 2009 bewerkt door Boswijk Posse
gpsgek Geplaatst 27 februari 2009 Geplaatst 27 februari 2009 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
Boswijk Posse Geplaatst 27 februari 2009 Auteur Geplaatst 27 februari 2009 Halleluja. Via een paar uur omzwervingen is het opgelost _0_ . Hoe simpel kan het zijn 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
Aanbevolen berichten