Announcement

Collapse
No announcement yet.

Untergruppe (childern) auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Untergruppe (childern) auslesen

    Hallo

    Ich habe folgende xml-Datei die ich mit php auslesen möchte. Die Informationen aus "wpt" erhalte ich problemlos, aber alles von gsak; gelingt mir einfach nicht - habe x Varianten versucht.
    Wie bekomme ich das hin (namespases)?

    ----
    <?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/1 http://www.groundspeak.com/cache/1/0/1/cache.xsd" xmlns="http://www.topografix.com/GPX/1/0">
    <name>Adventure Labs</name>
    <wpt lat="38.470583333333" lon="-28.426616666667">
    <time>2021-05-12T20:59:41.263</time>
    <name>LCCACC01</name>
    <desc>1- A Montanha – Casa da Montanha!</desc>
    <url>https://labs.geocaching.com/goto/dcaccc9c-101d-4f1b-849c-96ab66c5f080</url>
    <urlname>S1 A Montanha - PICO</urlname>
    <sym>Geocache</sym>
    <type>Geocache|Lab Cache</type><gsak:wptExtension xmlns:gsak="http://www.gsak.net/xmlv1/5">
    <gsak:Code>LCCACC01</gsak:Code>
    <gsak:IsPremium>false</gsak:IsPremium>
    <gsak:FavPoints>0</gsak:FavPoints>
    <gsak:UserFlag>false</gsak:UserFlag>
    <gsak:Guid>134be25b-fec9-493c-be35-e853ff8d22f3</gsak:Guid>
    <gsakNF>false</gsakNF>
    <gsak:FTF>false</gsak:FTF>
    ------

    foreach ($xml->wpt as $wpt)
    {
    echo 'lon: ' . $wpt['lon'] . '<br>';
    echo 'lat: ' . $wpt['lat'] . '<br>';
    echo 'Name:' . $wpt->name . '<br>';
    foreach ($xml->children('gsak',true) as $child)
    {
    echo $child->getName() . ' = ' . $child . "<br />\n";
    }
    }


    Viele Grüsse aus dem Süden, Nebbiolo

  • #2
    so wie das sehe sind die gsak Tags Kinder des Waypoint und nicht des Wurzelements
    Christian

    Comment


    • #3
      Vielen Dank Christian für die super schnelle Antwort!

      Kinder vom $wpt?

      foreach ($wpt->children('gsak',true) as $child)

      aber es zeigt gleichwohl nicht an :-(

      wie müsste denn die Abfrage lauten?

      Comment


      • #4
        Ein wpt ist ein waypoint (u.a. Geocaching)
        Wie ich gerade sehe sind die gsak Tags Kinder wpt->type
        Also erst wpt->type holen und dessen Kinder lesen

        Sieh dir das XML mit einem XML-Editor an, um die Struktur zu sehen
        https://xml-copy-editor.sourceforge.io/
        Christian

        Comment


        • #5
          Danke für deine Geduld ;-)
          Ich verstehe ja wirklich nicht viel davon ... aber ist type wirklich ein Kind? - ist ja auch mit </type> abgeschlossen.

          Mein Problem ist;
          <gsak:wptExtension xmlns:gsak="http://www.gsak.net/xmlv1/5">
          steht leider nicht auf einer neuen Zeile ...

          Mit
          foreach ($wpt->wptExtension as $gsak)
          erhalte ich nichts - mit
          foreach ($wpt->gsak:wptExtension as $gsak)
          gibt es einen Syntax-Fehler

          wie komme ich nur an die verflixten gsak Daten heran?

          Comment


          • #6
            Es ist wurscht, in welchen Zeilen das steht.
            Also mal hier sichtbar gemacht:
            https://justpaste.it/74r55

            Deine gsaks sind Kinder von gsak:wptExtension

            Es sollte
            foreach ($xml->wpt as $wpt)
            {
            ....
            $element=$wpt['gsak:wptExtension'];//???
            echo $element;

            foreach ($elementl->children('gsak',true) as $child)
            {
            echo $child->getName() . ' = ' . $child . "<br />\n";
            }
            ....

            https://stackoverflow.com/questions/...-php-simplexml

            Zuletzt editiert von Christian Marquardt; 13.08.2021, 14:05.
            Christian

            Comment


            • #7
              --- letztes post nicht gesehen ... werde das mal anschauen ---

              habe schweiss auf der Stirne nicht nur wegen der Hitze ;-)

              <type>Geocache|Lab Cache</type><gsak:wptExtension xmlns:gsak="http://www.gsak.net/xmlv1/5">
              habe ich mal "übersichtlicher" geändert auf
              <type>Geocache|Lab Cache</type>
              <gsak:wptExtension xmlns:gsak="http://www.gsak.net/xmlv1/5">

              den "type" kann ich wie alles unter wpt anzeigen mit : echo 'type ' . $wpt->type . '<br>';

              $type=$wpt->['type']; ergibt einen Syntaxfehler - $type=$wpt['type']; hat $type keinen Inhalt

              Ich habe es auch mal versucht mit:
              foreach ($wpt->wptExtension->children('gsak',true) as $child)

              auch kein Erfolg :-(
              Zuletzt editiert von nebbiolo; 13.08.2021, 14:13.

              Comment


              • #8
                Du musst das Child gsak:wptExtension von wpt lesen und über dessen Kinder iterieren.
                Siehe obigen Link registerNamespace
                Christian

                Comment


                • #9
                  seit Stunden lese und test ich ... werde dann Morgen einen neuen Versuch starten

                  also doch irgend was mit "namespaces" wie bei #1 vermutet

                  Ich habe es auch noch erfolglos wie folgt (wohin das wpt?) versucht:

                  $asins = simplexml_load_file($filename);
                  if(count($asins)):
                  //alternate way other than registring NameSpace
                  //$asin = $asins->xpath("//*[local-name() = 'ASIN']");

                  $asins->registerXPathNamespace('prefix', 'http://www.gsak.net/xmlv1/5');
                  $asin = $asins->xpath("//prefix:gsak");
                  echo "<pre>";print_r($asin);
                  endif;

                  Comment


                  • #10
                    Guten Morgen

                    Neuer Tag - neues Glück :-)

                    Hier die Lösung falls sich mal jemand interessiert:

                    foreach ($xml->wpt as $wpt)
                    {
                    echo 'lon: ' . $wpt['lon'] . '<br>';
                    echo 'lat: ' . $wpt['lat'] . '<br>';
                    echo 'Name:' . $wpt->name . '<br>';

                    $ns = $wpt->children('http://www.gsak.net/xmlv1/5');
                    foreach($ns as $gsak)
                    {
                    $attributes = $gsak->attributes();
                    $key = (string) $attributes['wptExtension'];
                    echo 'Code ' . $gsak->Code . '<br>';
                    }
                    }

                    Danke für die Tipps und sonnige Grüsse, Nebbiolo

                    Comment

                    Working...
                    X