Grundlagenfrage: XML auswerten und ausgeben

O

Oli Krause

Mitglied
Thread Starter
Dabei seit
14.01.2009
Beiträge
69
Reaktionspunkte
0
Hallo zusammen,

ich habe da mal ein Problem, bei dem ich die grundsätzliche Vorgehensweise nicht so richtig weiß:
Bei Goneo hab ich erstmal einen Webspace incl Domäne, wo dementsprechend auch meine Homepage läuft.
Jetzt habe ich seit kurzem ein kleines Heimnetzwerk am laufen, an welchem ein Datenlogger via Ethernet hängt. Dieser Datenlogger hat einen integrierten Webserver. Wenn man die IP-Adresse des Loggers gefolgt von "/xml" aufruft, liefert der Webserver eine XML-Ansicht. Das funktioniert auch soweit von Außen...über Dyndns.
Jetzt mein Endziel: ich möchte die Daten des Loggers auf meiner Page aufbereitet darstellen. Das heißt...ich möchte das xml-File auswerten.
Nur ist mir jetzt die generelle Vorgehensweise nicht wirklich klar.
- wie triggere ich zyklisch an, daß der Logger einen neuen Datensatz ausgibt ?
- wie handle ich das ausgegeben, daß auf meinem Frontend nicht das XML ausgegeben wird, sondern die extrahierten Daten und diese dann aufbereitet.
-Kann ich die gewünschten Daten aus dem XML extrahieren und auf MySQL-Bank ablegen ?

Vielen Dank für Tipps.....aber geht nicht zu tief..ich bin Anfänger zumindest habe ich seit 2005 nichts mehr gemacht...:)

Grüßle

Oli
 
Mit einer Scriptsprache wie PHP musst Du die Daten aufbereiten. Das kannst Du mit den PHP-internen Funktion erledigen (falls auf dem Server vorhanden) oder zur Not z.B. mit Xmlize. Die Daten kannst Du dann entweder in eine DB schreiben oder gleich ein HTML-Snippet erzeugen und speichern, dass Du dann auf der Webseite inkludieren kannst.
Zur Automation bietet sich ein sogenannter cronjob an.
 
Zuletzt bearbeitet von einem Moderator:
ich wollt gerade sagen,

"erklär mir mal einer dynamische Programmierung, das HTTP-Protokoll, XML und Datenbanken aber geht nicht in die Tiefe bitte " :)

Fragen wir mal anders mit welchem Teilaspekt möctest Du denn anfangen?
 
  • Gefällt mir
Reaktionen: below
Hai zusammen,

ersmal Danke für die Antworten...
Also ein wenig in die Tiefe können wir schon gehen, aber seid milde zu mir..:)

Fangen wir damit an: mal angenommen ich habe auf der Festplatte eine XML-Datei. Die kann man dann via Ajax auslesen. Aber in meinem Fall liegt die XML-Datei nicht als File vor, sondern wird von dem Datenlogger erzeugt und liegt vermutlich nur im Cache des IE oder Firefox ?!?

Würde das weiterhelfen, wenn ich Euch mal die IP gebe und Ihr seht Euch das mal direkt an ?
Ich nehme einen Logger mit nach Hause und schließe den an....melde mich ab ca. 18 Uhr nochmal....

Liebe Grüße

Oli
 
Oli Krause schrieb:
Fangen wir damit an: mal angenommen ich habe auf der Festplatte eine XML-Datei. Die kann man dann via Ajax auslesen. Aber in meinem Fall liegt die XML-Datei nicht als File vor, sondern wird von dem Datenlogger erzeugt und liegt vermutlich nur im Cache des IE oder Firefox ?!?

Laaaangsam!

Zunächst XML und Ajax haben nix miteinander zu tun primär!
XML ist eine Auszeichnungssprache die einen Text zergliedert und den einzelnen Abschnitten damit Bedeutungen zuweist. Nicht mehr und nicht weniger

<mensch>
<vorname value="Horst" />
<nachname value="Hüschenbüsch" />
<alter value="22" />
</mensch>

wäre ein rudimentärer XML-Mensch. Wie genau so ein Mensch für XML auszusehen hat kann man in einem sogenannten Schema oder einer DTD definieren. Quasi die Grammatik für die Struktur ( hat genau 1 Alter, hat mind. 1 Vornamen,...)


Diese Datei nun zu lesen da gibt es unterschiedliche Ansätze:

- man liest die ganze Struktur einfach baummäßig ein und verarbeitet sie
- man liest die Struktur, validiert sie ( Anzahl Altersangaben,...) gegen das Schema und verarbeitet dann

dem liegen also unterschiedlich komplexe Regeln zu Grunde. Möglich ist es auch eine Transformationsregel zu definieren (Stichwort) XSLT um etwa den obigen XML-Mensch in Browser-taugliches HTML zu übersetzen.

Allein das Thema XML füllt ganze Bücher. Dann gilt es die Sprache zu beherrschen mit der das parsen/transformieren durchgeführt werden soll und dann kommt AJAX/HTTP oben auf um eine dynamische Web2.0 gemäße Aktualiserung innerhalb einer Website durchführen zu können!
 
Hai zusammen,

vielen Dank Wegus !
Mit XML kenn ich mich bereits recht gut aus, da ich beruflich häufig damit arbeite ( Softwareentwickler - c++ -im Prüfmittelbau...:) )
Was mir irgendwie fehlt, ist , wie ich die Daten aus der dargestellten Webpage in die SQL-Datenbank bekomme...

Jetzt mal gaaanz langsam. Ich habe den Logger an mein Netzwerk angeschlossen und er kann somit abgerufen werden:

Webserver des Loggers:
gischpl.dyndns.org

Wenn ich das ganze im XLM-Format anschauen möchte dann der andere Aufruf:

gischpl.dyndns.org/xml

So wie es dargestellt wird, finde ich es aber nicht wirklich Userfreundlich. Daher möchte ich die XML-Daten in meine SQL-DB bringen und dann ordentlich aufbereitet auf meiner HP ausgeben.....

Dankeschön und Grüße

Oli
 
Hai zusammen,

ähhmm, hat den niemand ne Idee ?
Wäre schön, wenn ich das eine oder andere Schlagwort lesen könnte. Nur weiß ich halt schon rein gar nicht, wie ich anfangen könnte, da die Info zwar im XML-Format vorliegt, aber nicht wirklich als File......

Viele Grüße

Oli
 
Ich steh leider etwas auf dem Schlauch, was Du brauchst.

Allerdings bin ich auch "tradioneller" Entwickler, und kein Web-Developer.

Alex
 
Hallo Alex,

ich glaube, daß das zum Problem gehört....es zu beschreiben...:)

Wenn Du auf den http://gischpl.dyndns.org/xml klickst, dann werden Daten im XML-Format dargestellt. Das sind Daten aus einem Datenlogger. Dieser Daten möchte ich nun auf meiner Homepage darstellen....gscheit aufbereitet.

Wenn jetzt die XML-Daten als File vorliegen würden, wäre das vermutlich nicht schwer, aber ich bekomme die Daten ja übers Web....da liegt mein Problem...oder denk ich zu kompliziert ?

Ich stell mir vor, die Daten quasi auszulesen ( halt nicht vom File ) und in meine SQL-Datenbank zu schreiben. Von da aus kann ich dann weiterverarbeiten.
Erschwerend kommt noch hinzu, daß ja dynamische Werte aufgezeichnet werden und bei jedem neuen Aufruf des Links werden andere Werte ausgegeben ( nur nicht im Moment, da kein Sensor dranhängt )...

Vielen Dank fürs Verständniss....

Grüße
Oli
 
Kommen die Daten als XML? Dann wende doch einfach ein XSLT Stylesheet darauf an, aus die Maus.

Alex
 
@below
an XSLT dachte ich auch, aber muss das nicht bei der XML Datei eingebunden werden? Auf die hat er ja scheinbar keinen Einfluss, da diese automatisch erzeugt wird!?

Wäre schön, wenn ich das eine oder andere Schlagwort lesen könnte.

Lies dir die erste Antwort noch mal ganz genau durch. Die von dms angesprochene PHP5-Funktion SimpleXML müsste zum abarbeiten von XML Dateien wohl reichen!? ;)
(Hinweis: Wichtig dabei ist, dass SimpleXML dringend php5 braucht und auf dem Server installiert sein muss!)

Solltest du Probleme beim Abholen der Daten haben, könntest du es mit fsockopen() probieren - damit hab ich aber keine Erfahrung. Aus Google ist allerdings zu lesen, dass im Grunde keine Probleme auftauchen dürften, da simplexml_load_file($url) scheinbar auch remote zugriff bietet.

Genug Stichwörter ;)
 
Hm, ich würde die URL mit http://de2.php.net/curl abfragen und die Datei dann mit SimpleXML (oder was auch immer) weiterverarbeiten.
 
AW: Grundlagenfrage: XML auswerten und ausgeben

Also, muss du das xml wirklich in eine Datenbank zwischenschreiben?

Naja, ich empfehle dir,

nimm Python. Es gibt ein grosses bekanntes Forum dafür :)

Was das Pythonscript macht ist nix anderes als einen http aufruf, genaudas was auch der browser macht und dann kannst du es in ein file schreiben. Das klingt kompliziert, ist aber mit python in ein paar zeilen geschehen. Kein Witz.

Dann nimm bitte XSLT!

Du kannst optional auch einen XML-Parser nehmen, aber das brauchst du in diesem fall nicht.

du wandelst das XML file per XSLT in ein html file um. G E N A U DAFÜR ist xsl da. Dann musst du bei veränderungen auch nicht im code rumfrickeln, sondern änderst dein xsl file ab und das wars. Achso, das html file kannst du dann auf deinen webspace uploden und jeder kann es schön aufbereitet ansehen.

Sag mal ehrlich. Wie oft möchtest du die Seite abrufen? Das mit dem script lohnt sich nur, wenn oft und automatisiert werden soll.

Wenn das 1x wöchentlich ist, oder täglich, kannst du auch vorübergehend das vom Browser nehmen und bei dir abspeichern, dann einfach das xsl dazu schreiben und per xslt-Prozessor umwandeln lassen in ein html file und das hochladen. Dauert per Hand, wenn man das xsl file einmal definiert hat 1-2 minuten ( mit umwandeln und upload und allem ). Ka wo da das Problem sein soll?

Das was du vorhast ist wirklich einfach und sollte einem

Zitat:

"Softwareentwickler - c++ -im Prüfmittelbau..."

keine Probleme bereiten.

Wenn du das automatisiert machen willst, dann wie? Task der zu einer bestimmten uhrzeit/intervall anläuft. willst du das bei deinem provider laufen lassen, oder oder oder?
 
AW: Grundlagenfrage: XML auswerten und ausgeben

Hm, ich würde die URL mit http://de2.php.net/curl abfragen und die Datei dann mit SimpleXML (oder was auch immer) weiterverarbeiten.

Genau davon rate ich in diesem und ähnlichen Fällen ab! Warum? Man schiesst nicht mit Atombomben auf kleine Ameisen.

Für Curl gibt es schöne high-level-ebene Wrapper.
Wenn er die Logs schon in html haben will, dann XSL. Warum soll er sich durchparsen und die html table dann generien wahrscheinlich schön mit placeholdern.
 
AW: Grundlagenfrage: XML auswerten und ausgeben

Ich hatte XSLT ja schon oben vorgeschlagen. Funktional äquivalent kann man auch XQuery drauf loslassen.

Mit beidem lässt sich XML hervorragend in HTML umsetzten.

Alex
 
AW: Grundlagenfrage: XML auswerten und ausgeben

Hai zusammen,

erstmal vielen Dank für die vielen Antworten !
Ich möchte das ganze in eine DB aufnehmen, weil ich letzten Endes auch Monatsauswertungen usw anzeigen möchte ( der Datelogger wird an meine Heizung mit Solar angeschlossen und ich erhoffe mir eine optimierung der Heizparameter...)
Newkid: jau, letzten Endes soll das ganze automatisiert laufen. Ich habe dazu folgende Vorstellung:
In meinem Heimnetzwerk hängt eine NAS mit Webserver und der Datenlogger. Auf diesem Webserver sollte eine Anwendung laufen, die automatisiert vom Webserver des Datenloggers die XML-Html-Seite abholt, die Werte auswertet und in die Datenbank speichert.
Bei Goneo läuft meine reguläre Homepage. Wenn auf dieser HP der entsprechende Link aufgerufen wird, kann ausgewählt werden, ob ich eine Tagesanzeige, Monatsanzeige usw. haben möchte. Aufgrund dieses Aufrufes werden die Daten aus der Datenbank meiner NAS geladen, aufbereitet und versendet.

Klar, Du hast recht....Problem mit Umsetzung habe ich nicht, aber woran es einfach fehlt, ist die Initialzündung....sprich, dadurch, daß ich täglich nur mit der Kommunikation von Messmitteln zu tun habe, hab ich natürlich keinen Plan, was in der Internet-Welt so gang und gebe ist....:)

Vielen Dank

Gruß
Oli
 
AW: Grundlagenfrage: XML auswerten und ausgeben

Ok, jetzt habe ich da einen besseren überblick was du da machen willst. Damit fallen, für mich, die vorschläge mit ajax und so weg.

Du musst mal schauen wie du auf deinem NAS, mit dem Webserver, Python ( maybe auch Perl ) zum laufen bekommst. Ich rate dir zu Python, da ich weiss das es das gibt was du machen willst und mit den entsprechenden includes du das sehr leicht umsetzen kannst. Google ist da sicher ein guter Freund, wegen Python zum laufen bekommen.

Du musst also eine Python Anwendung schreiben, die läuft und zu bestimmen Zeiten ( z.b. 1 mal täglich ) die html seite aufruft und die daten in die Datenbank schreibt, + ein HTML file generiert was du, auch mit python, dann einfach per ftp auf deine homepage uploaden kannst.

Ka, wie du deine Webpage aufbaust, aber du kannst ein file dir auf einem bestimmten ordner z.b. erlauben "/monat 05/1.html, 2.html, ... ect.

Ich hoffe du weisst was ich meine. Damit kann man sich die html files anschauen. Oder du baust diese html dateien in eine schöne webseite per link ein, oder bildest die links dynamisch, oder oder.

Das Pythonscript kann auch so gepolt sein, das es dann am Monatsende automatisch, für den letzen Monat sich die Daten zieht und hierfür ein html file erstellt, was auch automatisch zu deinem Provider upgeloaded werden kann.

Ist nur ein Vorschlag, wie ich es machen würde.

Wobei du nichtmal eine Datenbank bräuchtest. Du könntest auch die xml files zusätzlich zu den html files uploaden und das script zieht sich per ftp download die von deinem provider und erstellt die Monatsübersicht. So hat der User die Wahl, ob er sich das XML anschauen will, eventuell zur eigenen Weiterverarbeitung, oder das HTML.

Ich persönlich würde die DB den Vorzug geben.

Ich hoffe, ich konnte dir die "Zündung" geben :)

Wenn du dich mit Softwareentwicklung allgemein auskennst, aber mit den "anderen" Sachen nicht so, dann kannst du dir da gern 5 - 10 MannTage ( a 8 std pro MT ) einplanen. So als groben Anhaltspunkt. Darf gern auch daneben liegen.
 
Hai Newkid,

vielen Dank für die ausführliche Initialzündung !
Daß das ein großer Haufen Arbeit ist, ist mir klar....:)
Was mich halt am meisten reizt, ist die Herausforderung an Neuen Dingen..:)

Ich werde erstmal die DB und den Webserver auf meiner NAS in Betrieb nehmen. Dann versuchen das Phyton-Gedöns zum Laufen zu bringen ( auf Anhieb habe ich noch keine Lösung für meine QNAP gefunden ....).
Dann sehen wir weiter....


Grüße

Oli
 
hi, was für einen Datenlogger benutzt du?

Ich habe mal ein kleines PHP-Skript geschrieben, mit dem ich - xml Werte auslese und in eine SQL Datenbank übertrage. Jedoch fehlt mir der Datenlogger ;)
Du hast jedoch deutlich mehr XML Werte als ich es hier für unser Haus hatte, vielleicht bringt es dir etwas...

function xmltophp($xml)
{
if (file_exists($xml)) {
return simplexml_load_file($xml); }

else {
echo "Fehler in xmltophp()";
return;
}
}

// Wo liegen die XML Daten?
$FsDaten = 'upload/FS-Daten.xml';
$FsTemp = 'upload/FS-Temp.xml';
$FsPV = 'upload/FS-PV.xml';

// XML DATEIEN EINLESEN
$xmlDaten = xmltophp($FsDaten);
$xmlTemp = xmltophp($FsTemp);
$xmlPV = xmltophp($FsPV);

// VERARBEITUNG XML DATEN
$ZeitDaten = $xmlDaten->ITEM[0]->TIME;
$solar = $xmlDaten->ITEM[0]->Solar;
$Kessel = $xmlDaten->ITEM[0]->Kessel;

$StromPV = $xmlPV->ITEM[0]->PV;

Die SQL-Dateien z.B sehen so aus:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE Archiv [
<!ELEMENT LIST (ITEM*)>
<!ELEMENT ITEM (TIME,Betonkern,Solar,Kessel)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT Betonkern (#PCDATA)>
<!ELEMENT Solar (#PCDATA)>
<!ELEMENT Kessel (#PCDATA)>
]>
<LIST>
<ITEM>
<TIME>16.02.2011 16:03:58</TIME>
<Betonkern>0</Betonkern>
<Solar>16350</Solar>
<Kessel>294000</Kessel>
</ITEM>
</LIST>
 
Zurück
Oben Unten