Nadja: XML aus Array auslesen

Hallöchen :)

Nachdem ich einen Consolenbefehl mit PHP abgesetzt habe, erhalte ich ein Array mit folgendem Inhalt:

  
<?xml version="1.0" encoding="iso-8859-1"?>  
<qstat>  
 <server type="UT2S" address="xx.x.xx.xxx:xxxx" status="UP">  
  <hostname>xx.x.xx.xxx:xxxx</hostname>  
  <name>Servername</name>  
  <gametype>xDeathMatch</gametype>  
  <map>DM-Antalus</map>  
  <numplayers>0</numplayers>  
  <maxplayers>16</maxplayers>  
  <ping>24</ping>  
  <retries>0</retries>  
 </server>  
</qstat>  

Es handelt sich um ein numerisches Array, in dem jeweils eine Zeile dieses XML-Baumes steht.

Ich will diesen auslesen und halt grafisch schick darstellen.

Allerdings krieg ich es einfach nicht hin, auf diese Array-Elemente vernünftig zuzugreifen :(

Setze ich z.B. den Befehl

  
print $xml_arr[3];  

ab, wird die entsprechende Zeile nicht im Browser angezeigt, nur im Quelltext :(

Habt ihr evtl. Ratschläge, wie ich auf die Daten im XML-Baum im Array zugreifen kann?
Das kann doch eigentlich nicht so schwer sein, aber ich stehe total auf dem Schlauch :(

Liebe Grüße,
Nadja

--
system.exit(0);
  1. hi,

    Setze ich z.B. den Befehl

    print $xml_arr[3];

    
    > ab, wird die entsprechende Zeile nicht im Browser angezeigt, nur im Quelltext :(  
      
    Möchtest du wirklich xml ausgeben? Dann sende einen passenden Content-Type-Header an den Client.  
      
    Oder möchtest du die XML-ähnlichen Strings in HTML anzeigen? Dann maskiere die HTML-eigenen Sonderzeichen, insbesondere die < und >.  
    Dabei hilft dir die Funktion htmlspecialchars().  
      
    gruß,  
    wahsaga  
      
    
    -- 
    /voodoo.css:  
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    
  2. Hallo,

    Es handelt sich um ein numerisches Array, in dem jeweils eine Zeile dieses XML-Baumes steht.

    Insbesondere zum Zugriff auf solche XML-Dokumente bietet sich SimpleXML an. Du müsstest den Array zu einem String zusammenfügen (implode()), dann lässt sich das Dokument mit simplexml_load_string() einlesen (PHP 5).
    $xmlsimpleobjekt->qstat->server->hostname müsste dann z.B. den Inhalt des hostname-Elements ergeben.

    Allerdings krieg ich es einfach nicht hin, auf diese Array-Elemente vernünftig zuzugreifen :(

    Wenn du bspw. aus dem String »  <map>DM-Antalus</map>« den Teilstring »DM-Antalus« haben willst, kannst du auch reguläre Ausdrücke verwenden.

    Mathias

    1. Hallöchen :)

      Insbesondere zum Zugriff auf solche XML-Dokumente bietet sich SimpleXML an.

      Hey super, danke für die Links :)
      Ich werde es gleich mal ausprobieren!

      Allerdings krieg ich es einfach nicht hin, auf diese Array-Elemente vernünftig zuzugreifen :(

      Wenn du bspw. aus dem String »  <map>DM-Antalus</map>« den Teilstring »DM-Antalus« haben willst, kannst du auch reguläre Ausdrücke verwenden.

      Hab ich mir schon fast gedacht... Davor graut es mir aber immer so ;)

      Liebe Grüße,
      Nadja

      --
      system.exit(0);
      1. Liebe Nadja,

        Wenn du bspw. aus dem String »  <map>DM-Antalus</map>« den Teilstring »DM-Antalus« haben willst, kannst du auch reguläre Ausdrücke verwenden.
        Hab ich mir schon fast gedacht... Davor graut es mir aber immer so ;)

        das Suchmuster ist schnell erstellt: "/<map>([^<]*)</map>/"
        Wenn Du sicher sein kannst, dass innerhalb des Elementes <map> keine weiteren Elemente (also mit diesen spitzen Klammern) kommen, dann kannst Du sagen, dass eine Kette von aufeinanderfolgenden Zeichen, die alle nicht "<" lauten, gefunden werden soll.

        Da ich die Funktion preg_match für diesen simplen Zweck nicht mag (wegen der Paramter-Handhabung; für komplexere Zwecke mag ich sie aber schon!), "missbrauche" ich dafür gerne preg_replace (obwohl das sicherlich grausig ist):
        $meinString = preg_replace("/.*<map>([^<]*)<\/map>.*/", "\\1", $xml_quelltext);

        Schön ist was anderes, aber manchmal mache ich der Einfachheit halber Unschönes... :-)

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.