• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

PHP- GPX-Datei (XML) und ein Problem das mich verzweifeln lässt

braegler

Aktiver NGBler

Registriert
14 Juli 2013
Beiträge
904
Hallo zusammen,
wiedermal schlage ich hier mit einem Problem auf.
Ich bin seit ein paar Tagen Member bei Passknacker.com (eine Kraftrad orientierte Seite, bei der es ein Spiel gibt in dem es darum geht möglichst viele Punkte durch Abfahren von Pässen und Wasserscheiden zu erringen.
Die Seite bietet den Download von GPX Dateien an, die sämtliche in die Wertung aufgenommenen Stellen enthält. Erreicht man eine solche, muss man sein Motorrad, eine markante Stelle, sowie ein Jahresschild auf einem Foto vereinen. Um mir die Suche der markanten Stelle zu erleichtern, möchte ich entsprechende Bilder zu den Wegpunkten hinzufügen und dann auf mein Navi übertragen. Manuell ist das kein Problem...aber man ist ja schliesslich faul.

Also hab ich mir eine Funktion geschrieben, welche mir zu jedem Wegpunkt in einer GPX Datei das passende Bild sucht und eine weitere, die mir den Link dazu in die GPX einfügt.
Die Funktion sieht wie folgt aus:
[src=php]
<?php
function fCreateFullGPX ($sourcegpx){
$xml = simplexml_load_file($sourcegpx);
foreach ($xml as $cache) {
if ($cache->name) {
$extended = $cache->children("http://www.topografix.com/GPX/1/1");
//$pic = fGetPic($cache->name); //Das ist die Funkionn die den Pfad zum Bild liefert
$pic = "F:\GPXTEST\Bilder\383.jpg"; //Das ist mal eine Dummy-Zuweisung
$link = $cache->addChild('link','');
$link->addAttribute('href', $pic);
}
}
$xml->asXML ( "tmp.gpx" );
}
?>
[/src]


Hier mal wie es manuell funktioniert:
Original-Datei:
[src=xml]<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="MapSource 6.16.3" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">

<metadata>
<link href="http://www.garmin.com">
<text>Garmin International</text>
</link>
<time>2015-06-15T14:57:57Z</time>
<bounds maxlat="47.627598904073238" maxlon="7.912530172616243" minlat="47.626328626647592" minlon="7.904925188049674"/>
</metadata>



<wpt lat="47.626328626647592" lon="7.904925188049674">
<time>2015-06-15T14:56:12Z</time>
<name>Rathause</name>
<cmt>Hauptstrasse 17</cmt>
<desc>Hauptstrasse 17</desc>
<sym>Flag, Blue</sym>
<extensions>
<gpxx:WaypointExtension xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
<gpxx:DisplayMode>SymbolAndName</gpxx:DisplayMode>
</gpxx:WaypointExtension>
</extensions>
</wpt>

</gpx>
[/src]
und so sieht sie manipuliert aus:
[src=xml]<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="MapSource 6.16.3" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">

<metadata>
<link href="http://www.garmin.com">
<text>Garmin International</text>
</link>
<time>2015-06-15T14:57:57Z</time>
<bounds maxlat="47.627598904073238" maxlon="7.912530172616243" minlat="47.626328626647592" minlon="7.904925188049674"/>
</metadata>



<wpt lat="47.626328626647592" lon="7.904925188049674">
<time>2015-06-15T14:56:12Z</time>
<name>Rathause</name>
<cmt>Hauptstrasse 17</cmt>
<desc>Hauptstrasse 17</desc>
<link href="C:/Users/HomePC/Documents/POI_Testing/gpx/Bilder/rathaus.jpg"/>
<sym>Flag, Blue</sym>
<extensions>
<gpxx:WaypointExtension xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
<gpxx:DisplayMode>SymbolAndName</gpxx:DisplayMode>
</gpxx:WaypointExtension>
</extensions>
</wpt>

</gpx>
[/src]

Wie Ihr seht, ist nur die Zeile
[src=xml]<link href="C:/Users/HomePC/Documents/POI_Testing/gpx/Bilder/rathaus.jpg"/>[/src]
hinzugefügt. Die Datei ist valide und wird von den entsprechenden Programmen (Garmin POI Loader, freeware) problemlos geschluckt.


Wenn ich nun mein Skript ranlasse wird aus
[src=xml]<?xml version="1.1" encoding="UTF-8"?>
<gpx creator="passknacker.com" version="1.1" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">

<metadata>
<link href="http://www.passknacker.com">
<text>passknacker.com</text>
</link>
<time>2015-06-14T23:59:59Z</time>
<bounds maxlat="47.2673950" maxlon="8.8643360" minlat="47.2490644" minlon="8.8374616" />
</metadata>

<wpt lat="47.5693848" lon="7.6993399">
<ele>500.0000001</ele>
<time>2015-06-14T08:20:24Z</time>
<name>Rührberg</name>
<cmt>Wasserscheide - 32.2 - Foto: Ortstafel - DEU</cmt>
<desc>Wasserscheide - 32.2 - Foto: Ortstafel - DEU</desc>
<sym>Flag, Blue</sym>
<extensions>
<gpxx:WaypointExtension xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
<gpxx:Proximity>1000.0000000</gpxx:Proximity>
<gpxx:DisplayMode>SymbolAndName</gpxx:DisplayMode>
</gpxx:WaypointExtension>
</extensions>
</wpt>
</gpx>
[/src]
plötzlich
[src=xml]<?xml version="1.1" encoding="UTF-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="passknacker.com" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">

<metadata>
<link href="http://www.passknacker.com">
<text>passknacker.com</text>
</link>
<time>2015-06-14T23:59:59Z</time>
<bounds maxlat="47.2673950" maxlon="8.8643360" minlat="47.2490644" minlon="8.8374616"/>
</metadata>

<wpt lat="47.5693848" lon="7.6993399">
<ele>500.0000001</ele>
<time>2015-06-14T08:20:24Z</time>
<name>Rührberg</name>
<cmt>Wasserscheide - 32.2 - Foto: Ortstafel - DEU</cmt>
<desc>Wasserscheide - 32.2 - Foto: Ortstafel - DEU</desc>
<sym>Flag, Blue</sym>
<extensions>
<gpxx:WaypointExtension xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
<gpxx:Proximity>1000.0000000</gpxx:Proximity>
<gpxx:DisplayMode>SymbolAndName</gpxx:DisplayMode>
</gpxx:WaypointExtension>
</extensions>
<link href="F:\GPXTEST\Bilder\383.jpg"/></wpt>
</gpx>[/src]

Jage ich das Ergebnis durch den XMLValidator, bekomme ich folgenden Fehler angezeigt:
cvc-complex-type.2.4.d: Invalid content was found starting with element 'link'. No child element is expected at this point.

Natürlich hab ich erstmal im verlinkten NS nachgeschaut, und finde dort ein entsprechendes Item: http://www.topografix.com/GPX/1/1/#type_wptType

Hat irgend jemand von Euch eine Ahnung was ich falsch mache? Bin für jede Hilfe dankbar.

p.s.:Grad gesehen,dass ich den Text im Falschen Browser-Fenster eingegeben hab.... sollte eigentlich im Webmaster landen. Wäre prima, wenn ein Mod es entsprechend verfrachten könnte. THX
 
Zuletzt bearbeitet:

Shodan

runs on biochips

Registriert
14 Juli 2013
Beiträge
661
Ort
Citadel Station
Siehe: wptType
dort steht: <-- elements must appear in this order -->

manuell fügst du den Link auch an der richtigen Stelle ein, dein Script hängt ihn aber einfach an.
Das Link Element selbst ist (an dieser Position) das unerwartete Kind ;)
 

braegler

Aktiver NGBler

Registriert
14 Juli 2013
Beiträge
904
  • Thread Starter Thread Starter
  • #3
F**k bin ich doof. Danke für den Hinweis, hab nun das ganze zum DOM gelöst und funtioniert einwandfrei-
 
Oben