XML Datei auslesen

Hi Jungs und Mädels,

bin noch ziemlich neu dabei im Bezug auf IPS und PHP.
Möchte nun ein XML File, oder besser gesagt den Wert eines Attributes auslesen. Leider habe ich hier im Forum noch nichts darüber gefunden.

Kann mir jemand mal einen Ansatz dazu geben?

Vielen Dank im Voraus!

Hat auch weniger was mit IPS zu tun.

php xml - Google-Suche

paresy

Ist ja schön und gut und die Idee hatte ich natürlich auch schon, nur leider komme ich auf keinen grünen Zweig.
Übers Internet (Google) lese ich, das es viele über SimpleXML machen, aber woher bekomme ich denn diese Klasse, oder sehe ich da was falsch? Eine SimpleXML.php kann man auch nirgendwo downloaden.
Wenn ich den Befehl simplexml_load_file() in einem Skript ausführen will klappt das garnicht.

Was mache ich falsch? Wenn denn irgendjemand was mit XML schon gemacht hat, wäre ich für ein Bisschen Quellcode überaus dankbar.

Tja Doktor … das Problem bei so einer Sache ist nun mal die Eigeninitiative. Dazu gehört einiges an Einarbeitung, vor allem in Sachen Php … oder die richtige Benutzung der Suche bei Google.

Vom Prinzip her mußt du die XML-Datei einlesen und dann über eine Foreach Schleife auswerten, sind ja prinzipiell nur Arrays.
Ich denke dazu gibt es Haufenweise Beispiele im Netz. So Pauschal kann man dir da eh nicht helfen, das hängt immer davon ab wie dein File aufgebaut ist und was du genau auslesen willst.

Den Befehl simplexml_load_file() beherrscht IPS übrigens schon, man muss ihn nur richtig anwenden! :wink:

Schon mal hier nachgesehen?: PHP: SimpleXML - Manual

Warum postest du nicht das was du schon probiert hast. Daran könnte man dir am einfachsten erklären wie es weiter gehen müßte.

Gruß
Jens

Ich will gerne genug Eigeninitiative reinstecken, nur steh ich da wie der Ochse vorm Berg. Denn ob mein Lösungsansatz richtig ist weiß ich ja nicht mal.

Also mal von vorne:
Es geht um mein tolles Internetradion MusicPal (von der Firma Freecom). Ich kann das per Telnet ein- und ausschalten. Nachrichten und z.B. Texte und Temperturwerte auf dem Display ausgeben uvw. (werde ich vielleicht auch mal hier im Forum vorstellen, da der Musicpal genau das selbe kann wie die Logitech SqueezeBox, mit dem Unterschied, dass der Musicpal statt 300€ nur 100€ kostet).
Ein Problem habe ich allerdings, denn ich kann nicht so einfach herausfinden, ob der MusicPal ein- oder ausgeschaltet ist. Dies kann ich aber einsehen, wenn ich diese Adress aufrufe:
http://192.168.178.40/admin/cgi-bin/state.cgi?fav=1
(habs als Datei im Anhang (State.cgi ist in State.cgi.txt umbenannt worden) mit Markierung was ich auslesen will).

Es ist der Eintrag „<power_state>0</power_state>“ der anzeigt, ob das Gerät an oder aus ist.

Wie kann ich dass nun auslesen?

Meine Idee:
Ich muss zunächst die Datei einlesen. Hier gibt es allerdings ein Problem, denn wenn ich den oben genannten Link aufrufe muss ich zunächst Benutzername und Kennwort eingeben (lässt sich auch nicht ausschalten). Danach kann ich erst diese Seite einsehen. Das habe ich auch schon mit der PHP funktion „ftp_get“ probiert. Aber das klappt auch schon nicht (Fehlermeldung „Keine Authorisierung“).
Wenn ich die Datei dann eingelesen hätte, würde ich mit SimpleXML den Eintrag suchen.

Was meint Ihr. Gibts jemanden der auch den Freecom MusicPal besitzt?

state.cgi.txt (431 Bytes)

Ok, das ist ja schon mal etwas :wink:

Ich habe irgendwo hier im Forum das gleiche Problem mit meiner Fritzbox gehabt und auch ne Lösung dazu gepostet. Das geht per http_post_fields() oder über Curl.
Prinzipiell dürfte das ähnlich funktionieren, aber dazu müßte man Infos über die Loginseite deines Gerätes haben. :frowning:

Wenn man die Datei erst einmal hat, dann ist der Rest kein Problem. Entweder über SimpleXML einlesen und den Eintrag suchen und auswerten oder über den Textparser.

Instanz hinzufügen > (none) > Textparser und dann konfigurieren :wink:

Edit: http_post_fieds() http://www.ip-symcon.de/forum/f3/wlan-schalten-per-ip-symcon-6194/

Gruß
Jens

Ok. Also ich probiere gerade deinen Lösungsvorschlag in dem anderen Thread.
Aber irgedwie hänge ich wieder einmal. Muss ich da noch irgendetwas includen?
Ich bekomme nämlich diese Fehlermeldung:

Fatal error:  Call to undefined function http_post_fields() in [Testskript] on line 14

Hört sich für mich so an, als kennt IPS die Funktion nicht.

Na klar … hast du etwa nicht alles gelesen? :wink:

Die .dll muss eingebunden werden.

Edit 1:
Ansonsten mußt du mal hier vorbei schauen: http://forum.freecompromo.com/viewforum.php?f=66

Evtl. können die etwas zu den Parametern auf der Loginseite sagen.

Edit 2:
Da du schon die Telnetfunktion aktiviert hast, gehe ich davon aus das du schon ein wenig mehr ausprobiert hast.

Schau mal hier: http://knx-user-forum.de/30199-post27.html (Funktionen via URL Aufruf)
Kannst du nicht einfach die Seite aufrufen und direkt parsen oder kommt da immer die Loginabfrage??
http://(ip_des_Musicpal)/admin/cgi-bin/state.cgi ???

Doch ich habs gelesen, und auch so gemacht, aber leider kennt er die Funktion immer noch nicht.

Habe die Dateien
libeay32.dll
libssl32.dll
ssleay32.dll
in den System32 Ordner kopiert.

Dann hab ich die
php_http.dll
in meinen Extension Ordner unter C:\IP-Symcon\Extensions\ kopiert. Dann noch die php.ini wie folgt abgeändert.



```php

extension_dir = "C:\Programme\IP-SYMCON\Extensions\"
max_execution_time = 180
extension = "php_http.dll"

[Session]
session.save_handler = "files"
session.save_path = "C:\IP-Symcon\web_data\session"
session.auto_start = 0
session.use_trans_sid = 1
session.name = "pt"  

Aber leider geht es noch nicht. Muss ich die DLLs im System32 Ordner auch in der php.ini hinzufügen?

Wenn ich die State Seite aufrufen will kommt immer die Benutzer und Kennwortabfrage.

Achso, und die anderen von Dir genannten Links kenne ich bereits und habe auch schon alle Telnetbefehle in den Griff bekommen. Es geht mir halt nur um den aktuellen Status. Das hat im Freecom-Forum auch noch niemand hinbekommen.

Hallo DoktorD,

die php_http.dll hast Du auch im IPS Verzeichniss ?

Nur in Extensions. Muss ich die doppelt haben, also in Extensions Ordner und im IPS-Ordner?

Einmal reicht halt nur im richtigen Verzeichnis.

Probleme behoben??
Die anderen .dll Dateien müssen eigentlich nur in den IPS Ordner … über die php.ini brauchen die nicht eingebunden werden.
Wie sieht denn die Fehlermeldung aus??

Und wegen der Statusseite … hiermit kannst du sie aber aufrufen, ja?

http://user:password@192.168.178.40/admin/cgi-bin/state.cgi?fav=1

Dann solltest du die Seite auch parsen können.

Also das hab ich auch schon so probiert:

<?
fopen("http://Admin:admin@192.168.178.40/admin/cgi-bin/state.cgi?fav=1","r");
?>

Aber dann bekomme ich diese Fehlermeldung:

Warning:  fopen(http://...@192.168.178.40/admin/cgi-bin/state.cgi?fav=1) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.0 401 Unauthorized
 in [Test] on line 2

Leider kann ich die DLLs immer noch nicht nutzen.

@Tetrapak:
Kennst du die VPN Software TeamViewer? Wenn du Lust hast, lasse ich dich mal auf meinen Rechner drauf, dann könntest du es dir mal anschauen.

Kannst du denn über die URL die Seite im Browser öffnen? Benutzer und Passwort richtig geschrieben?

Passwort und Benutzername sind richtig geschrieben. Die letzen Tage hat jemand im MusicPal Forum die selbe Idee.

Freecom Support :: View topic - Musicpal und PHP ?

Also noch einmal die Frage:

Wenn du die URL incl. Benutzer und Passwort in deinen Browser eingibst … kommst du dann auf die Statusseite oder nicht? Kannst du irgendeine andere Seite damit aufrufen und Schaltfunktionen ausführen?

DIREKT im Browser, nicht über PHP mit IPS !!!

Jens

Also über den Browser geht z.B. das …
http://Admin:admin@192.168.178.40/admin/cgi-bin/state.cgi

Aber, obwohl ich in der Adresszeile Benutzername und Passwort eingegeben habe, geht dieses Kennwortfenster trotzdem noch auf (Benutzername und Kennwort stehen dann drinne) und muss dann noch OK klicken.

Hallo DoktorD

ich lese die XML des ALL4000 wie folgt:

$array = file("http://192.168.135.31/xml");        //XML lesen
print_r($array);
echo $array[7];

Gruß HGP

Danke für deine Idee, aber weil die Seite die ich aufrufen will, leider ein Benutzername und Kennwort benötigt, bekomme ich als Fehlermeldung:

Warning:  file(http://...@192.168.178.40/admin/cgi-bin/state.cgi) [function.file]: failed to open stream: HTTP request failed! HTTP/1.0 401 Unauthorized
 in [MusicPalState] on line 3