Xml-Datei von Wetterstation verarbeiten

Hallo Zusammen,

da der Textparser auf dem Raspberry ja noch nicht läuft habe ich ein Problem.

Wie verarbeite ich meine XML-Datei , so das ich Variablen mit Daten erhalte ?

Meine XML-Datei sieht so aus:

<weather><indoor humidity>60</indoor humidity><outdoor humidity>49</outdoor humidity><indoor temperature>19.9</indoor temperature><outdoor temperature>23.6</outdoor temperature><wind speed>0.0</wind speed><wind direction>E</wind direction><pressure>967.0</pressure><last update>2014-07-03 09:55:03</last update></weather>

Hat einer eine Idee oder Lösung für mich ??

Danke Tim

Hi Tim!

Gibt sicher einige Lösungen, kommt drauf an wie du an die Daten kommst und was du damit machen willst…aber spontan fällt mir regex ein…

<?
$string = "<weather><indoor humidity>60</indoor humidity><outdoor humidity>49</outdoor humidity><indoor temperature>19.9</indoor temperature><outdoor temperature>23.6</outdoor temperature><wind speed>0.0</wind speed><wind direction>E</wind direction><pressure>967.0</pressure><last update>2014-07-03 09:55:03</last update></weather>";

preg_match("|<indoor humidity>(.*)</indoor humidity>|", $string, $match);
//print_r($match);

echo "Luftfeuchtigkeit innen = ".$match[0];

?>

…oder umbauen und mit „preg_match_all“ arbeiten…

Grüße,
Chris

Klingt schon mal gut wie schreibe ich den preg_match in eine variable ? Sorry bin nicht so fit in programmieren

Die Daten liegen auf den raspberry als xml Datei vor

Hab dir doch ein ECHO als Beispiel vorgegeben…

Einfach statt ECHO ein SETVALUE machen :wink:

Mit „print_r($array);“ bekommt man den Inhalt eines Arrays angezeigt, zu Testzwecken hilfreich bei preg_match, deshalb habe ich es reingeschrieben und nur auskommentiert.

Also für dein Variablen setzen, einfach bei meinem Beispiel nach dem ECHO einfügen:

<?
$string = "<weather><indoor humidity>60</indoor humidity><outdoor humidity>49</outdoor humidity><indoor temperature>19.9</indoor temperature><outdoor temperature>23.6</outdoor temperature><wind speed>0.0</wind speed><wind direction>E</wind direction><pressure>967.0</pressure><last update>2014-07-03 09:55:03</last update></weather>";

preg_match("|<indoor humidity>(.*)</indoor humidity>|", $string, $match);
//print_r($match);

//echo "Luftfeuchtigkeit innen = ".$match[0];

$luftfeuchteVariableID = 99999;  // ID deiner Integer oder Float Variable, wo die Luftfeuchte reingeschrieben werden soll
$luftfeuchte = $match[0];
SetValue($luftfeuchteVariableID, $luftfeuchte);

?>

…wobei man die vorletzte Zeile auch auslassen und direkt das $match[0] im SetValue verwenden kann…

-Chris-

PS: Ich darf dir mal das hier ans Herz legen: http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/
Und das hier http://www.google.de :wink:

Danke werde es nacher mal probieren

Ich nutze für XML immer das SimpleXmlElement.
http://php.net/manual/de/function.simplexml-load-file.php
Michael

Danke Michael, genau DAS wollte mir einfach nicht einfallen :smiley: Ja, ist die zu bevorzugende Lösung mit SimpleXML :slight_smile:
…aber viele Wege führen nach Rom :cool:

Grüße,
Chris

erledigt !!!

Freut mich zu hören, danke für die Rückmeldung!

Aber kann es sein, dass du in Zeile 12 ein „SetValueInteger“ auf eine Float-Variable machst? :slight_smile: Kannst entweder die Variable ändern oder einfach nur „SetValue(12345, 60);“ schreiben.

Grüße,
Christoph

So das Skript läuft jetzt .

Nun mein nächste Problem -

Ich würde gerne den

$string = "<weather><indoor humidity>66</indoor humidity><outdoor humidity>49</outdoor humidity><indoor temperature>19.9</indoor temperature><outdoor temperature>23.6</outdoor temperature><wind speed>0.0</wind speed><wind direction>E</wind direction><pressure>967.0</pressure><last update>2014-07-03 09:55:03</last update></weather>";

ersetzen durch die weather.XML Datei.

Habe es mit dem Befehl simplexml_load_file versucht.

Mein Fehlerbild :

Hat jemand ne Idee ??

Es fehlt der XML Header in der Datei. Darum der Fehler.
Alternativ die Datei in einen String laden und den Header selber anfügen.
Michael

Tim > Außerdem würfelst du grad etwas viel durcheinander… Mein Ansatz mit „preg_match“ und „simplexml“ sind 2 Paar Schuhe… Wenn du jetzt auf simplexml umbauen willst, musst du dein Skript allgemein abändern, nicht nur mal eben die eine Zeile…

Für meinen Ansatz mit „preg_match“ brauchst du das:

$string = file_get_contents("........./weather.xml");

Und des weiteren brauchst du ein wenig mehr davon: www.google.de :wink: :stuck_out_tongue:

Grüße,
Chris

Danke Chris es läuft