Ankündigung

Einklappen
Keine Ankündigung bisher.

Verschachtelte XML in PHP für LBS auslesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Verschachtelte XML in PHP für LBS auslesen

    Hallo zusammen,
    ich stehe auf dem Schlauch mit Sicherheit könnt Ihr mir ganz schnell helfen.

    Ich bin gerade Dabei den LBS für die BOSE Sountouch zu überarbeiten.
    Bei einer Abfrage bekomme ich nachfolgende XML zurück.

    In der XML werden in Summe 6 "Presents" beschrieben.
    Jetzt möchte ich die Daten der 6 "Presents" auslesen und variablen zuordnen.
    Wie bekolle ich z.B. vom Presten id 1 die ContentItem source und vom Present 2 auch?

    Code:
    <presets><preset id="1" createdOn="1549026477" updatedOn="1549026477"><ContentItem source="TUNEIN" type="stationurl" location="/v1/playback/station/s24896" sourceAccount="" isPresetable="true"><itemName>SWR3</itemName><containerArt>http://radiotime-logos.s3.amazonaws.com/s24896q.png</containerArt></ContentItem></preset><preset id="2" createdOn="1565258610" updatedOn="1565258610"><ContentItem source="AMAZON" type="tracklist" location="search/../catalog/stations/ASKR9EKHI9GS5/#playable" sourceAccount="xx@web.de" isPresetable="true"><itemName>Kinderlieder</itemName><containerArt>https://images-na.ssl-images-amazon.com/images/G/01/Gotham/Artist_DE/DE111_0058_eudmvd_gotham_ArtTriangleTemplate_Kinderlieder._SX150_SY150_.jpg</containerArt></ContentItem></preset><preset id="3" createdOn="1554407028" updatedOn="1554407028"><ContentItem source="AMAZON" type="tracklist" location="search/../catalog/playlists/B07PHP8ZWY/chunk=0/#playable" sourceAccount="xx@web.de" isPresetable="true"><itemName>Romantische Pop-Songs</itemName><containerArt>https://m.media-amazon.com/images/I/91W4nil59JL._SX150_SY150_.jpg</containerArt></ContentItem></preset><preset id="4" createdOn="1547243147" updatedOn="1565305024"><ContentItem source="AMAZON" type="tracklist" location="catalog/stations/AUTF210RZQL6/#playable" sourceAccount="xx@web.de" isPresetable="true"><itemName>Gute-Laune-Pop</itemName><containerArt>https://images-na.ssl-images-amazon.com/images/G/03/DE-digital-music/Weekly_Flip/2019/CW31/00_2400x2400_10._CB439554436_SX150_SY150_.jpg</containerArt></ContentItem></preset><preset id="5" createdOn="1559251378" updatedOn="1562321571"><ContentItem source="AMAZON" type="tracklist" location="search/../catalog/playlists/B07QP9J6YD/chunk=0/#playable" sourceAccount="xx@web.de" isPresetable="true"><itemName>Entspanntes Rock-Dinner</itemName><containerArt>https://m.media-amazon.com/images/I/91O4SzX+pcL._SX150_SY150_.jpg</containerArt></ContentItem></preset><preset id="6" createdOn="1558884192" updatedOn="1558884192"><ContentItem source="TUNEIN" type="stationurl" location="/v1/playback/station/s80044" sourceAccount="" isPresetable="true"><itemName>Radio TEDDY</itemName><containerArt>http://cdn-radiotime-logos.tunein.com/s80044q.png</containerArt></ContentItem></preset></presets>

    PHP-Code:
    //get /presets
                
    $curl curl_init();
                
    curl_setopt_array($curl, array(
                    
    CURLOPT_URL => "http://"logic_getVar($id,2) .":8090/presets",
                    
    CURLOPT_HEADER => 0,
                    
    CURLOPT_RETURNTRANSFER => 1));
                    
                
    $result curl_exec($curl);
                
    $xmldata_presets = new SimpleXMLElement($result);
                $
    1_CIsource $xmldata_presets->present id="1"->ContentItem["source"];//falsch??
    //...???
                
                
                // return results
            //present 1
                
    logic_setOutput($id,33,$1_createdOn);
                
    logic_setOutput($id,34,$1_updatedOn);
                
    logic_setOutput($id,35,$1_CIsource);
                
    logic_setOutput($id,36,$1_CItype);
                
    logic_setOutput($id,37,$1_CIlocation);
                
    logic_setOutput($id,38,$1_CIsourceAccount);
                
    logic_setOutput($id,39,$1_CIisPresetable);
                
    logic_setOutput($id,40,$1_CIitemName);
                
    logic_setOutput($id,41,$1_CIcontainerArt);
            
    //present 2
                
    logic_setOutput($id,42,$2_createdOn);
                
    logic_setOutput($id,43,$2_updatedOn);
                
    logic_setOutput($id,44,$2_CIsource); 

    #2
    Keine Ahnung zwar von EDOMI ... aber PHP ist easy ... https://www.php.net/manual/de/simple...attributes.php

    Kommentar


      #3
      versuch mal ungefähr so ...

      PHP-Code:
      <?php

      $xml 
      '<presets><preset id="1" createdOn="1549026477" updatedOn="1549026477"><ContentItem source="TUNEIN" type="stationurl" location="/v1/playback/station/s24896" sourceAccount="" isPresetable="true"><itemName>SWR3</itemName><containerArt>http://radiotime-logos.s3.amazonaws.com/s24896q.png</containerArt></ContentItem></preset><preset id="2" createdOn="1565258610" updatedOn="1565258610"><ContentItem source="AMAZON" type="tracklist" location="search/../catalog/stations/ASKR9EKHI9GS5/#playable" sourceAccount="xx@web.de" isPresetable="true"><itemName>Kinderlieder</itemName><containerArt>https://images-na.ssl-images-amazon.com/images/G/01/Gotham/Artist_DE/DE111_0058_eudmvd_gotham_ArtTriangleTemplate_Kinderlieder._SX150_SY150_.jpg</containerArt></ContentItem></preset><preset id="3" createdOn="1554407028" updatedOn="1554407028"><ContentItem source="AMAZON" type="tracklist" location="search/../catalog/playlists/B07PHP8ZWY/chunk=0/#playable" sourceAccount="xx@web.de" isPresetable="true"><itemName>Romantische Pop-Songs</itemName><containerArt>https://m.media-amazon.com/images/I/91W4nil59JL._SX150_SY150_.jpg</containerArt></ContentItem></preset><preset id="4" createdOn="1547243147" updatedOn="1565305024"><ContentItem source="AMAZON" type="tracklist" location="catalog/stations/AUTF210RZQL6/#playable" sourceAccount="xx@web.de" isPresetable="true"><itemName>Gute-Laune-Pop</itemName><containerArt>https://images-na.ssl-images-amazon.com/images/G/03/DE-digital-music/Weekly_Flip/2019/CW31/00_2400x2400_10._CB439554436_SX150_SY150_.jpg</containerArt></ContentItem></preset><preset id="5" createdOn="1559251378" updatedOn="1562321571"><ContentItem source="AMAZON" type="tracklist" location="search/../catalog/playlists/B07QP9J6YD/chunk=0/#playable" sourceAccount="xx@web.de" isPresetable="true"><itemName>Entspanntes Rock-Dinner</itemName><containerArt>https://m.media-amazon.com/images/I/91O4SzX+pcL._SX150_SY150_.jpg</containerArt></ContentItem></preset><preset id="6" createdOn="1558884192" updatedOn="1558884192"><ContentItem source="TUNEIN" type="stationurl" location="/v1/playback/station/s80044" sourceAccount="" isPresetable="true"><itemName>Radio TEDDY</itemName><containerArt>http://cdn-radiotime-logos.tunein.com/s80044q.png</containerArt></ContentItem></preset></presets>';

      $xmldata_presets = new SimpleXMLElement($xml);
      $presets = array();
      $i=0;
      $output 33;

      foreach (
      $xmldata_presets->preset as $preset) {
          
      $preset_attributes $preset->attributes();
          
      $contentItem_attributes $preset->ContentItem->attributes();
          
      $preset_id intval($preset_attributes['id']);
          
          
      $j=0;

          foreach (
      $preset_attributes as $attribute => $value) {
              
      $o $output+$i*8+$j;
              
      logic_setOutput($id,$o,(string)$value);
              
      $j++;
          }
          
              
      $presets[$preset_id][(string)$attribute] = (string)$value;

          foreach (
      $contentItem_attributes as $attribute => $value){
              
      $o $output+$i*8+$j;
              
      logic_setOutput($id,$o,(string)$value);
              
      $j++;
          }

          
      $i++;

      }

      ?>

      Kommentar


        #4
        Cool vielen Dank für die Hilfe.
        Leider komme ich erst morgen Nacht dazu, den Code zu testen.
        Ich werde berichten.

        Kommentar


          #5
          Hi. Wie kommst du denn mit dem Baustein voran?

          Ich nutze ihn schon ne ganze Weile aber plötzlich schmiert er mir immer beim Start direkt ab. Im Log steht dann folgender Fehler:
          Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000895.php | Fehlercode: 0 | Zeile: 25 | String could not be parsed as XML EXCEPTION"

          Irgendeine Idee woran das liegen könnte?

          Grüße,
          Guido

          Kommentar


            #6
            Zitat von guidob2000 Beitrag anzeigen
            String could not be parsed as XML
            Zitat von guidob2000 Beitrag anzeigen
            Irgendeine Idee woran das liegen könnte?
            Könnte dran liegen, dass es kein korrektes XML ist.

            Kommentar


              #7
              OMG - muss ich blöde sein, dass ich nicht selbst darauf gekommen bin.

              Hast du den Text mit Google Translater von englisch über chinesisch ins russische nach spanisch, arabisch aufs deutsche übersetzt, um auf diese geniale Lösung zu kommen?

              Danke für den geistreichen Kommentar!

              Kommentar


                #8
                Zitat von guidob2000 Beitrag anzeigen
                OMG - muss ich blöde sein, dass ich nicht selbst darauf gekommen bin.

                Dann verstehe ich die Frage allerdings nicht ... die Antwort von jonofe ist aus meiner Sicht korrekt ... Du solltest Dir mal die XML-Ausgabe angucken, die geparst wird.

                Kommentar


                  #9
                  Ich kenne mich leider nicht gut genug mit PHP aus um das selbst debuggen zu können.

                  Mich wundert eben nur, dass der Baustein plötzlich spinnt, ohne dass ich etwas verändert habe. Er ist schon immer alle 1-2 Wochen mit dem Fehler abgestürzt. Nun passiert es aber jedesmal sofort nach dem Start!?

                  Ich habe nur die Eingänge E1 (IP-Adresse, Variant) und E3 (Ein/Aus) belegt. Meine Vermutung ist, dass es mit der IP Adresse zu tun hat, aber was soll man da falsch machen, zumal es ja bisher funktioniert hat.

                  Kommentar

                  Lädt...
                  X