Autor Zpráva
danhill
Profil
Dobrý den,
potřeboval pomoc s taháním dat z gpx souboru.
Ten má ve zkrácené verzi asi takový tvar:
<?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">
  <name>My Finds Pocket Query</name>
  
    <wpt lat="50.039983" lon="14.361483">
        <name>GC15TN3</name>
        <groundspeak:cache id="686035" available="True" archived="False" xmlns:groundspeak="http://www.groundspeak.com/cache/1/0/1">
        <groundspeak:name>Odula - Nad koupalištem</groundspeak:name>
        <groundspeak:type>Traditional Cache</groundspeak:type>
        <groundspeak:encoded_hints>dolni jeskyne, na bobek a doprava</groundspeak:encoded_hints>
        <groundspeak:logs>
            <groundspeak:log id="181097101">
            <groundspeak:date>2011-08-20T19:00:00Z</groundspeak:date>
            <groundspeak:finder id="3039555">Karel</groundspeak:finder>
            </groundspeak:log>
        </groundspeak:logs>
        <groundspeak:travelbugs />
        </groundspeak:cache>
    </wpt>
  
    <wpt lat="50.109233" lon="14.40425">
        <name>GC1HXAX</name>
        <groundspeak:cache id="1046094" available="True" archived="False" xmlns:groundspeak="http://www.groundspeak.com/cache/1/0/1">
        <groundspeak:name>Mala ricka/small river</groundspeak:name>
        <groundspeak:type>Multi-cache</groundspeak:type>
        <groundspeak:encoded_hints>sloupek svodidel</groundspeak:encoded_hints>
        <groundspeak:logs>
            <groundspeak:log id="348896449">
            <groundspeak:date>2013-09-08T19:00:00Z</groundspeak:date>
            <groundspeak:finder id="3039555">Karel</groundspeak:finder>
            </groundspeak:log>
        </groundspeak:logs>
        <groundspeak:travelbugs />
        </groundspeak:cache>
    </wpt>

</gpx>

Bodů v tagu wpt může být velmi mnoho a budou se měnit.Jinak ale struktura zůstává stejná.
Takže potřebuji foreach a každý wpt bod zpracovat zvláště.
Potřebuji z toho vytáhnout do proměnných obsahy těchto tagů:
<name>
<groundspeak:name>
<groundspeak:type>
<groundspeak:encoded_hints>
<groundspeak:date>
<groundspeak:finder id="3039555"> (id se bude měnit - jde ale o jméno uvnitř)

Zkoušel jsem to takto:
$xml=simplexml_load_file('tmp_finds/'.$newfilename);
foreach($xml->wpt as $point){
  print_r($point);
}
Ale naháže mi tam něco "SimpleXMLElement Object" a s tím array se mi nedaří dále pracovat nejspíše proto, že ty html tagy nejsou oficiální.

Taky jsem to zkoušel pomocí DOM :
$gpxDoc = new DOMDocument(); 
$gpxDoc->load( 'tmp_finds/'.$newfilename ); 
$searchNode = $gpxDoc->getElementsByTagName( "wpt->groundspeak:cache" ); 

foreach( $searchNode as $searchNode ) {  
     $cache_type = $searchNode->getElementsByTagName( "groundspeak:type" ); 
    $valueCache_type = $cache_type->item(0)->nodeValue; 
  
    echo $valueCache_type; 
} 

Ale tohle nefunguje vůbec :( ...
nightfish
Profil
<?php
    $xml=simplexml_load_file('tmp_finds/'.$newfilename);
    foreach($xml->wpt as $wpt) {
        $groundspeak = $wpt->children('http://www.groundspeak.com/cache/1/0/1');
        echo "name = ".$wpt->name."<br>";        
        echo "groundspeak:name = ".$groundspeak->cache->name."<br>";
        echo "groundspeak:type = ".$groundspeak->cache->type."<br>";
        echo "groundspeak:encoded_hints = ".$groundspeak->cache->encoded_hints."<br>";
        foreach ($groundspeak->cache->logs[0] as $log) {
            echo "groundspeak:date = ".$log->date."<br>";
            echo "groundspeak:finder = ".$log->finder."<br>";
        }
        echo "<hr>";
    }
danhill
Profil
nightfish:
Wooow ... moc děkuji, přesně to jsem potřeboval ...
zakopaný pes koukám je v pro mě nepochopené proměnné
$groundspeak = $wpt->children('http://www.groundspeak.com/cache/1/0/1');
která zařídí jakýsi překlad toho co potřebuji ...

Ale chodí to krásně, takže velmi děkuji...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: