XML Auslesen

Moderator: Mattk

haol
Fresh Boarder
Fresh Boarder
Posts: 14
Joined: Fri Apr 30, 2010 11:16 am
Location: 4112 Flüh
Contact:

XML Auslesen

Post by haol » Sat May 08, 2010 5:49 pm

Hallo,

weiss jemand welche Tag's ich auslesen muss oder im Echo angeben muss. Ich raff das nicht so ganz. Habe ein ganz simples script in php geschrieben, das ich auch schon verwende um andere XML Files auszulesen, aber irgendwie klappt das mit dem xml von Meteohub irgendwie nicht. Hier mal der Code.

<?php
$wetterdaten = simplexml_load_file('http://……datenxml.xml');
echo $wetterdaten->data->item->cat->unit['actual_th0_temp_c'];
?>


Vielen Dank mal für eure hilfe

gruss Oli

haol
Fresh Boarder
Fresh Boarder
Posts: 14
Joined: Fri Apr 30, 2010 11:16 am
Location: 4112 Flüh
Contact:

Re:XML Auslesen

Post by haol » Tue May 11, 2010 3:32 pm

Hallo
habe es geschaft, diese xml ist recht mächtig, aber sehr gut. B)

Gruss Oli

User avatar
benz
Junior Boarder
Junior Boarder
Posts: 25
Joined: Thu May 06, 2010 1:55 pm
Location: CH
Contact:

Re:XML Auslesen

Post by benz » Sat May 15, 2010 9:23 am

Hallo Oli

Was hast du gemacht, dass es dann gegangen ist? Ich bin auch daran für meine Webseite umzustellen.

Danke für deine Antwort!

Gruss benz

User avatar
benz
Junior Boarder
Junior Boarder
Posts: 25
Joined: Thu May 06, 2010 1:55 pm
Location: CH
Contact:

Re:XML Auslesen

Post by benz » Sat May 15, 2010 1:34 pm

So ich bin ein wenig weiter. Mit folgendem Code, kann ich Werte aus der XML auslesen:

if (file_exists('verzeichnis/datei.xml')){
$wetterdaten = simplexml_load_file('verzeichnis/datei.xml');

echo "Veroeffentlichungszeit: ".$wetterdaten->data[0]->item[12].".";?>
<br /><br />
<?php
echo "Automatische Prognose: ".$wetterdaten->data[0]->item[81].".";

} else {
exit('Konnte datei.xml nicht oeffnen.');
}
?>


Ich greife beispielsweise mit $wetterdaten->data[0]->item[81]; auf die automatisch generierte Wetterprognose zu.

Ich habe aber noch kein System gefunden, wie ich aus der Fülle von möglichen Daten die richtigen rausfinden kann.

Wenn ich die gesamte xml mit print_r($xml); aufrufe (Siehe Bildauschnitt), kann ich mich nur schwer orientieren. Oder hat da jemand einen Tipp für mich?

Gruss benz
Image

haol
Fresh Boarder
Fresh Boarder
Posts: 14
Joined: Fri Apr 30, 2010 11:16 am
Location: 4112 Flüh
Contact:

Re:XML Auslesen

Post by haol » Sat May 15, 2010 6:21 pm

Hallo
also eigentlich mag ich das auch nicht so gern wenn ich in einem Forum was suche,dann das das Problem gefunden habe und dann als Antwort steht: Habe es rausgefunden.
Ok hier wäre die Lösung:

Code: Select all

<?php


$xml = simplexml_load_file('http://....datenxml.xml');
echo '<pre>';
print_r($xml);
echo '</pre>';
?>
Zuerst mit diesem Code das XML anzeigen lassen und am besten Ausdrucken.

Ok nun sieht das etwa so aus:
SimpleXMLElement Object
(
[config] => SimpleXMLElement Object
(
[language] => de
[temp_sensor] => th0
[hum_sensor] => th0
[dew_sensor] => th0
[baro_sensor] => thb0
[wind_sensor] => wind0
[rain_sensor] => rain0
[row] => Array
(
[0] => last24h
[1] => last60m
[2] => hour1
[3] => day1
)

)

[data] => Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[timeframe] => actual
)

[item] => Array
(
[0] => 20100511090501
[1] => 11.05.2010 09:05:01
[2] => 11.05.2010
[3] => 09:05:01
Wichtig ist hier die Unterscheidung zwischen Array und SimpleXMLElement Object (bzw. generell Objekten). Auf Array-Werte greifst du mit
[...] zu und auf Attibute von Objekten mit
->
Ein Beispiel:
// $xml ist ein Objekt, also ->
// $xml->data ist ein Array, also [], [0] für das erste Element
// $xml->data[0] ist wieder ein Objekt, also ->
// $xml->data[0]->item ist wieder ein Array, also [], [0] für das erste Element
echo $xml->data[0]->item[0];
ok hoffe so dies einigermassen verständlich rüber gebracht zu haben.

Gruss OliB)

User avatar
benz
Junior Boarder
Junior Boarder
Posts: 25
Joined: Thu May 06, 2010 1:55 pm
Location: CH
Contact:

Re:XML Auslesen

Post by benz » Sun May 16, 2010 7:06 am

haol wrote:

Code: Select all

<?php
$xml = simplexml_load_file('http://....datenxml.xml');
echo '<pre>';
print_r($xml);
echo '</pre>';
?>
)
Genau dieses Schnipsel hat mir weitergeholfen. Herzlichen Dank Oli! Aufwändig bleibt die Zusammenstellung in einer PHP-Seite trotzdem. Es sind unheimlich viele Variablen. Aber wie du schon gesagt hast: Diese XML-File ist mächtig! ;-)

Gruss benz

User avatar
benz
Junior Boarder
Junior Boarder
Posts: 25
Joined: Thu May 06, 2010 1:55 pm
Location: CH
Contact:

Re:XML Auslesen

Post by benz » Mon May 17, 2010 11:23 am

Heute morgen stellte ich mit Schrecken fest, dass alle Daten auf meiner Wetterseite, die ich über das all-sensors-xml File einbette, in der Rubrik date[...] item[...] falsch waren.

So war bespielsweise der Wert für die aktuelle Temperatur gestern noch zu finden unter:

Code: Select all

$wetterdaten->data[0]->item[83]  
Heute musste ich feststellen, dass sämtliche Werte im "actual"-Bereich, also ->data[0] um -2 in der Rubrik items verschoben waren.

Die Temperatur war also neu unter:

Code: Select all

$wetterdaten->data[0]->item[81]  
zu finden!

Ich habe nichts an der metehub-Einstellungen geändert.

Kann mir da jemand auf die Sprünge helfen. Ich bin absolut darauf angewiesen, dass die Struktur der XML-Datei gleich bleibt! Was könnte der Grund für die Strukturänderung im XML-File sein?

Gruss benz

wfpost
Platinum Boarder
Platinum Boarder
Posts: 588
Joined: Thu Jun 12, 2008 2:24 pm
Location: HONSOLGEN
Contact:

Re:XML Auslesen

Post by wfpost » Mon May 17, 2010 12:14 pm

hängt damit zusammen, daß es manchmal Tage gibt, wo der Mond nicht aufgeht.
D.h. es fehlen dann die beiden Werte für moonset_

z.B. heute bei mir nur Mondaufgang
actual_moonrise_standard_local 08:13
actual_moonrise_standard_utc 06:13

Hatte ein ähnliches Problem bei meinen shellscripts, wo ich nach festen Zeilennummern die Sensorwerte ermitteln wollte..

Hatte es mit einer bedingten Abfrage gelöst, z.B. ist die Variable moonset_standard_local vorhanden (ja oder Nein?)

User avatar
benz
Junior Boarder
Junior Boarder
Posts: 25
Joined: Thu May 06, 2010 1:55 pm
Location: CH
Contact:

Re:XML Auslesen

Post by benz » Mon May 17, 2010 12:55 pm

Danke wfpost für deinen wichtigen Hinweis! Genau, der Mond ist schuld!

Yep, jetzt habe ich meine gestrige XML mit der jetzigen, aktuellen XML verglichen:

Mein gestriges XML listet auf:
Zitat:
<item sensor="moonrise" cat="standard" unit="local">06:21</item>
<item sensor="moonrise" cat="standard" unit="utc">04:21</item>
<item sensor="moonset" cat="standard" unit="local">23:01</item>
<item sensor="moonset" cat="standard" unit="utc">21:01</item>

Das sind die Werte von:
$wetterdaten->data[0]->item[54]
$wetterdaten->data[0]->item[55]
$wetterdaten->data[0]->item[56]
$wetterdaten->data[0]->item[57]

Zur Zeit fehlen die beiden Zeilen für moonset, also die Werte
->data[0]->item[56]
und
->data[0]->item[57]

Aus diesen Grund verschiebt es natürlich vom Wert her alle darauf folgenden Werte. Und dies sind natürlich die aktuellen Wetterdaten! Denn einmal sind vier Werte da und dann nur wieder zwei.
So kann ich nie gezielt auf die Werte zugreifen und dies betrifft genau die aktellen Wetterdaten die unten folgen!

Der Mond müsste ganz unten stehen, damit es die anderen Werte nicht tangiert.

Du sprichst ein shellscript an. Aber he, ich bin nicht Programmierer. Ich bin mit so was total überfordert! Das muss doch auch ohne komplizierte Coderei gehen. Warum die XML-Zeit für den Mond nicht einfach stehen lassen und dafür ein Platzhalter reinstellen?

Gruss benz

User avatar
benz
Junior Boarder
Junior Boarder
Posts: 25
Joined: Thu May 06, 2010 1:55 pm
Location: CH
Contact:

Re:XML Auslesen

Post by benz » Tue May 18, 2010 6:29 am

Nochmals ich, ich habe mir die ganze Sache nochmals überlegt. Bei diesem Problem muss ich kapitulieren. Es war schon schwierig genug für mich, mit der XML-Datei einigermassen zurechtzukommen. Am Sonntag hatte ich dann ein Highlight, als Oli mir aufzeigte, wie die XML aufgebaut ist und es tat!

Nun stelle ich fest, dass dieses Struktur ständig ändert. Das ist doch nicht sauber! Das muss ein Bug sein. Die Lösung, einfach ein array zu schaffen ist nicht kundenfreundlich und eine unnötige Hürde. Oder sind alle meteohub-Nutzer Programmierer? Dann habe ich wohl das falsche Produkt gekauft.

Ich bitte wirklich um Hilfe hier!

Gruss benz

bubulino
Fresh Boarder
Fresh Boarder
Posts: 15
Joined: Tue Mar 30, 2010 3:24 pm
Location: Schwellbrunn Schweiz

Re:XML Auslesen

Post by bubulino » Tue May 18, 2010 7:32 am

Hallo Benz

Ich denke, dass nicht allzuviele die XML-Lösung verwenden. Meine Schätzung ist: 95% arbeiten für die Darstellung auf der HP mit den Grafiken.

Das sagt auf einen Blick halt eben auch extrem viel aus (Verlauf, Trend, aktueller Wert). Ich denke "wfpost" wird Dir seine Lösung schon präsentieren - aber halt einfach, wenn er das nächste mal reinguckt.

Auf der anderen Seite ist es natürlich schon so wie Du schreibst: Ein XML-Wert muss seinen "identifier" so oder so behalten und der "Schlüssel", an dem der Wert aufgehängt ist, darf eben NICHT variabel sein.

Ich glaube, da müsste schon was geändert werden. Und ich denke, das wird auch gemacht - aber wohl nicht von heute auf morgen. Aber ich denke: Immer noch die weit bessere Situation und es kümmert sich jemand drum, als es wird quasi gar kein Support geboten (anderes Produkt, das Du ja auch kennst....).

Grüsse

Markus

User avatar
benz
Junior Boarder
Junior Boarder
Posts: 25
Joined: Thu May 06, 2010 1:55 pm
Location: CH
Contact:

Re:XML Auslesen

Post by benz » Tue May 18, 2010 8:15 am

bubulino wrote: Auf der anderen Seite ist es natürlich schon so wie Du schreibst: Ein XML-Wert muss seinen "identifier" so oder so behalten und der "Schlüssel", an dem der Wert aufgehängt ist, darf eben NICHT variabel sein.
Hallo Markus

Danke für deinen Kommentar. Genau darauf möchte ich ja hinaus. Ein variabler "Identifier", bringt es nicht so.

Ich hoffe, auf eine Korrektur und bin auch zuversichtlich, dass es ein Lösung geben wird. Ich habe meine Seite wieder auf das meteohub-Template umgestellt, damit ich nicht ständig Zuweisungen neu machen muss.
Allerdings ist da eben nicht mehr dynamisch und so geht das Widget nicht, die iPhone-Anbindung. Die XML-Möglichkeit wäre eben schon das Gelbe vom Ei! ;-)

Gruss benz

wfpost
Platinum Boarder
Platinum Boarder
Posts: 588
Joined: Thu Jun 12, 2008 2:24 pm
Location: HONSOLGEN
Contact:

Re:XML Auslesen

Post by wfpost » Tue May 18, 2010 5:20 pm

Verstehe ich dies falsch, aber du nutzt doch ein php script um die XML-Datei auszulesen. Oder?

Damit wäre es doch ohne weiteres möglich nach dem Feldnamen moonset zu suchen, und wenn dieser nicht vorhanden ist, eine bedingte Verzweigung (Sprung) einzubauen, der das Fehlen berücksichtigt.

Alternativ könnte man doch den Kopfnamen des XML-Feldes als Identifier benutzen, statt der Zeilennummer, dann sollten keine Probleme entstehen.

Schreib einfach mal eine email an Boris.

Ich denke eine Änderung, die die Felder für moonset moonrise im XML und den Sensorlisten belässt, auch dann wenn keine Zeitdaten vorliegen, sollte einfach zu realisieren sein.

Dabei sollte die Feldvariablen moonset moonrise immer in den Listen als 4 Felder/Zeilen enthalten sein und als Wert einfach ein "-" an Tagen an denen es keine Mondauf/untergänge gibt. Damit wäre dokumentiert, daß an dem bestimmten Tag kein Mondaufgang stattfindet und die Stringenz der Daten wäre gewährleistet.

User avatar
benz
Junior Boarder
Junior Boarder
Posts: 25
Joined: Thu May 06, 2010 1:55 pm
Location: CH
Contact:

Re:XML Auslesen

Post by benz » Tue May 18, 2010 5:35 pm

Hallo wfpost

Danke für deine Nachricht!

Ja, ich nutze php um die xml auszulesen. Leider fehlt es mir am Wissen, wie ich so einen Sprung veranlassen kann.

Ich denke auch, dass ich nicht alleine bin, der an so einer, meines Erachtens unnötigen Hürde scheitern würde.

Eine pragmatische Lösung wäre, dass die Zeile nicht einfach verschwindet, wenn kein Wert da ist, sondern dass eben für keinen Werte ein Platzhalterzeichen eingesetzt wird. So wie du es am Ende deines Posts schreibst.
Ein solches "Update" würde niemandem schaden, aber die Idee einer konsequenten XML-Struktur dienen.

Ich werde mal an Boris schreiben und fragen, was er davon hält.

Viele Grüsse und danke für die Unterstützung
benz

User avatar
admin
Platinum Boarder
Platinum Boarder
Posts: 5365
Joined: Mon Oct 01, 2007 10:51 pm

Re:XML Auslesen

Post by admin » Tue May 18, 2010 7:58 pm

eine Idee kommt mir noch. Du könntest das XML file auch selbst bauen und mit meteohub variablen garnieren. Meteohub würde das dann per FTP mit ausfegüllten variablen hochladen. Beim ersetzen der Variablen kann man mit ":" angeben, was im Falle des Nichtvorhandenseins eingesetzt werden soll.

Template-Beispiel:
<item name="moonrise">[actual_moon_rise_standard_local:--]</item>

wird dann beim upload aufgelöst zu
<item name="moonrise">13:45</item>
oder wenn kein Wert da ist
<item name="moonrise">--</item>

Du kannst dabei dann auch genau die XML-Struktur im Template vorgeben, die Du haben willst und das Template wird auch wesentlich kürzer sein, als der von Meteophub gelieferte XML-Gesamtbrocken. Alle Variable, die bei "http://ip-deines-meteohub/meteograph.cgi?text=all" gelsitet werden, können als variable verwendet werden. Ich denke so kommst Du am Elegantesten ans Ziel.

Steht im Handbuch unter HTML-Templates. Ob HTML drin ist, ist egal. Damit es verarbeitet wird, muss das template auf ".html" ende, der Upload-Name kann aber anders sein.

Post Reply