XML aus Array auslesen
Nadja
- php
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
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; }
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
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
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.