lezen in gpx file top op een bepaalde plaats
ik krijg enkel dit zoals ik u heb laten zien in vorige kader.(maar dit is niet de volledige xml array
Misschien heb je het verkeerde bestand ingelaen? Misschien moet je even de data opnieuw downloaden?
Ik weet het niet.
Hier krijg ik een volledige array.
En anders kan je voor het gemak ook de namespaces eruit strippen, als het haast heeft.
En anders moet je met xpath de namespace oproepen.
Gewijzigd op 19/02/2023 18:12:28 door - Ariën -
Dit is nog moeilijker dan het gewoon uitlezen via de gewone weg in php.
Het spijt mij zo dat we hier niet tot een oplossing komen.
Nogmaals hartelijk bedankt
- Ariën - op 19/02/2023 17:17:13:
Ik krijg ook een berg aan warnings, maar dat komt door die brakke namespaces.
Waar haal je die XML eigenlijk vandaan?
Waar haal je die XML eigenlijk vandaan?
Zo te zien is de XML gegenereerd door GSAK, maar ik heb sterk de indruk dat er een nabewerking op heeft plaatsgevonden, aangezien de GPX-bestanden die door mijn GSAK worden gegenereerd wel gewoon door de parser komen.
Het probleem met de laatst geposte XML is dat een heleboel regels beginnen met een of meerdere non-breaking spaces (ASCII 0xA0) in plaats van met gewone spaties (ASCII 0x20). Als je daar gewone spaties van maakt, wordt de XML goed verwerkt.
In een eerdere versie van de XML lijkt een global substitute te hebben plaatsgehad op het woord 'groundspeak'. Daar stond redelijk consequent een dubbele punt achter op plaatsen waar dat niet hoorde.
Ik krijg er door die brakke namespaces geen enkel fatsoenlijke data uit de node caches.
Als Berta nou antwoord gaf op de vraag hoe ze er aan kwam, had het duidelijk kunnen zijn wat er mee gebeurd is.
Gewijzigd op 19/02/2023 18:21:58 door - Ariën -
Dank jullie wel
Toevoeging op 19/02/2023 18:24:09:
de gpx wordt hier gemaakt zoals willem zei door GSAK
Ik zou het erg op prijs stellen als er netjes antwoord gegeven wordt op de gestelde vragen. Eerlijk gezegd wordt ik moet herhalen.
Toevoeging op 19/02/2023 18:27:33:
Maar toch raar dat Willem een goede XML krijgt, en jij een verkeerde.
Heb je misschien een foute buggende app ofzo?
Ik heb dat programma niet. Geocachen doe ik verder wel. Maar daar heb ik mijn eigen gekozen app's voor.
Ik denk dat het probleem bij je GSAK moet liggen. Je wilt liever niet in de poep van een brakke XML wroeten. ;-)
Gewijzigd op 19/02/2023 18:25:18 door - Ariën -
de gpx wordt hier gemaakt zoals willem zei door GSAK.
Nogmaals bedankt voor alles, maar hier houd het op voor mij.
Mocht Willem willen dan mag hij altijd een voorbeeld sturen hoe het te werk gaat om de gpx uit te lezen ook met de grounspeak:placed_by enz .
Allen echt heel erg bedankt
Je kan wel als een holbewoner met reguliere expressies aan de gang gaan, maar als je XML al brak is -al vraag ik me af hoe dat komt- heb je kans dat het straks wel goed gaat, en dan kan je alles weer omgooien.
Dus zoek uit waar de verschillen door worden veroorzaakt.
foutmeldingen op
$sxe=new SimpleXMLElement($xml);
Niet iedereen is bekend met GSAK verder.
Misschien kan ik eens kijken wat dit doet met mijn Geocache account.
Ik zal een stukje voorbeeldcode geven.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$xml = simplexml_load_file('c:/geo_db/test.gpx');
foreach ($xml->wpt as $wpt) {
echo $wpt['lat'] . '<br>';
echo $wpt['lon'] . '<br>';
echo $wpt->name . '<br>';
echo $wpt->desc . '<br>';
echo explode('|', $wpt->type)[1] . '<br>';
$wpt->registerXPathNamespace('gsak', 'http://www.gsak.net/xmlv1/6');
$wpt->registerXPathNamespace('groundspeak', 'http://www.groundspeak.com/cache/1/0/1');
$c = $wpt->children('groundspeak', true);
echo $c->cache->container . '<br>';
echo $c->cache->difficulty . '<br>';
echo $c->cache->terrain . '<br>';
echo $c->cache->country . '<br>';
echo $c->cache->state . '<br>';
}
?>
$xml = simplexml_load_file('c:/geo_db/test.gpx');
foreach ($xml->wpt as $wpt) {
echo $wpt['lat'] . '<br>';
echo $wpt['lon'] . '<br>';
echo $wpt->name . '<br>';
echo $wpt->desc . '<br>';
echo explode('|', $wpt->type)[1] . '<br>';
$wpt->registerXPathNamespace('gsak', 'http://www.gsak.net/xmlv1/6');
$wpt->registerXPathNamespace('groundspeak', 'http://www.groundspeak.com/cache/1/0/1');
$c = $wpt->children('groundspeak', true);
echo $c->cache->container . '<br>';
echo $c->cache->difficulty . '<br>';
echo $c->cache->terrain . '<br>';
echo $c->cache->country . '<br>';
echo $c->cache->state . '<br>';
}
?>
Omdat het <wpt>-element tot de default namespace behoort, is dat nog eenvoudig te verwerken in een foreach-loop.
Voor de elementen die tot de groundspeak-namespace horen (dus groundspeak:container en dergelijke) moet je eerst de namespace registreren om erbij te kunnen. Ik registreer in deze code ook de gsak-namespace. Omdat ik hier geen gsak:-elementen uitlees, is die regel eigenlijk niet nodig.
Vervolgens vraag ik via $wpt->children() alle child-tags in de groundspeak-namespace op. Eigenlijk hangt er maar één child-element onder wpt, en dat is groundspeak:cache. Daaronder hangen vervolgens alle andere elementen.
Ik hoop dat je hiermee weer wat verder kunt komen.
Gewijzigd op 19/02/2023 22:07:20 door Willem vp
Jij bent de man met de oplossing, en dit met weinig woorden.
Ik weet niet hoe ik u moet bedanken, maar dit is het stukje dat ik echt nodig had.
Blijkbaar had je mij heel goed begrepen en hebben we maar een paar keer naar elkaar geschreven.
Ik heb dit getest en het werkt perfect.
Nogmaals mijn grote dank.
Berta, ook al heeft Ariën niet direct een werkende oplossing verstrekt, zou je hem ook best even mogen bedanken. Hij heeft je op het juiste spoor gezet met SimpleXml en is al 3 dagen bezig om je te helpen. Dat Willem uiteindelijk een werkende oplossing aandraagt is top, maar volgens mij doen we het op dit forum "met z'n allen" en zie ik bij jou iets te weinig waardering daarvoor terug.
Dus bij deze, Ariën jij ook bedankt! ;-)
Daarin heb je gelijk, en dat ging ik nog doen, maar weet ik zit niet ganse dagen achter PC.
Met deze Ariën heel hartelijk bedankt voor uw tijd en uw tips.
Willem nogmaals bedankt voor de juiste oplossing.
Ozzie Bedankt om dit te laten weten .
Maw iedereen bedankt voor alles.