Spezielleres XML File mit JavaScript auslesen
Sam
- xml
Hallo XML- Masters, ich hab da eine Frage, die ich mittels Suchfunktionen nicht wirklich lösen konnte. Es handelt sich um die XML- (Log)- Datei von Motherboardmonitor 5, welche folgendermassen aufgebaut ist (beliebig viele Zeilen mit <log .... ):
____________________________
<MBM_INTERVAL>
<Log Date="18.04.2006" Time="13:58:26" CPU="1005 MHz" T_Case="38º C" T_CPU="45º C" T_Sensor_3="0º C" V_Core_0="1.78 V" V_Core_1="1.82 V" V_3.3="3.44 V" V_5.00="4.95 V" V_12.00="11.61 V" V_Minus_12.00="-12.07 V" V_Minus_5.00="-5.03 V" F_Fan_1="0 RPM" F_Fan_2="2008 RPM" F_Fan_3="0 RPM" C_CPU0="18.00 %"/>
<Log Date="18.04.2006" Time="13:58:25" CPU="1005 MHz" T_Case="38º C" T_CPU="45º C" T_Sensor_3="0º C" V_Core_0="1.78 V" V_Core_1="1.82 V" V_3.3="3.44 V" V_5.00="4.95 V" V_12.00="11.61 V" V_Minus_12.00="-12.07 V" V_Minus_5.00="-5.03 V" F_Fan_1="0 RPM" F_Fan_2="2008 RPM" F_Fan_3="0 RPM" C_CPU0="18.00 %"/>
</MBM_INTERVAL>
____________________________
Was ich damit machen wollte:
Mittels javascript die einzelnen Werte hinter dem "=" auslesen, z.B. mit dieser funktion die ich zusammen mit einer XMLHTTP- Instanz verwende.
xmldoc entspricht der über XMLHTTP angeforderten Logdatei (wie oben).
____________________________
function alertInhalt() {
if (http_request.readyState == 4) {
var xmldoc = http_request.responseXML;
var root_node = xmldoc.getElementsByTagName('test').item(0);
var answer = root_node.firstChild.data;
//var answer = http_request.responseText;
if(document.getElementById("inhalt").innerHTML != answer){
document.getElementById("inhalt").innerHTML = answer;
}
else{
document.getElementById("inhalt").innerHTML = "";
}
}
}
____________________________
Diese Funktion funktioniert zusammen mit diesem XML- File:
____________________________
<?xml version="1.0"?>
<test>funktioniert ja</test>
__________________________
Meine Frage ist also: Wie kann ich die einzelnen werte hinter dem "=" in der Logdatei mittels javascript auslesen. Und: Wie ich es schaffe dies ausschliesslich bei der ersten (und aktuellsten) Zeile zu tun.
Vielleicht hab ich auch irgendetwas verpasst und möchte mich für diesen Fall schonmal entschuldigen. Ich bin jedenfalls sehr dankbar für jede Lösung, ich wirklich ein n00b ^^.
MfG Sam
PS: Das ganze sollte dann eine AJAX- gestütze "Echtzeit"- Anzeige von CPU Load, Temperatur usw. werden, halt ohne lästigen meta- refresh ;) ich hänge eigentlich nur noch beim Auslesen fest
Hallo,
Meine Frage ist also: Wie kann ich die einzelnen werte hinter dem "=" in der Logdatei mittels javascript auslesen. Und: Wie ich es schaffe dies ausschliesslich bei der ersten (und aktuellsten) Zeile zu tun.
Du hast die Logdatei in der Variablen xmldoc. Dich interessieren die einzelnen Elemente mit dem Tagnamen „Log“:
xmldoc.getElementsByTagName("Log");
Genauer gesagt interessiert Dich davon nur das erste Element:
logentry = xmldoc.getElementsByTagName("Log")[0];
(oder xmldoc.getElementsByTagName("Log").item(0)
)
Von diesem XML-Elementknoten interessieren Dich die diversen Attribute. Diese kannst Du also über attributes[0] etc. auslesen. Ich würde aber eher getAttribute() verwenden, schließlich weisst Du ja schon, wie die Attribute heissen:
ventilator2 = logentry.getAttribute("F_Fan_2");
Eine andere Möglichkeit ist es wohl, Dir ein eigenes Objekt Javascript zu basteln, dass für alle Statuswerte zuständig ist:
var status = {
"Date":"",
"Time":"",
...
"C_CPU0:""
};
Ich nutze hier JSON-Syntax. Objekte kann man mittels objekt[key] nach einem Wert befragen, insofern sind diese wie assoziative Arryas. Und als Key nehme ich aus Faulheit einfach den Namen des jeweiligen Attributes. Man kann so ganz einfach, das Objekt mit einer einfachen Schleife aus logentry raus befüllen:
for (key in status) {
status[key] = logentry.getAttribute(key);
}
Und hat alle Werte in einem Objekt zur Verfügung, ohne sich den Namensraum mit Krempel zuzumüllen.
Tim
Hallo Tim, ich danke dir für deine umgehende und ausführliche Erklärung, sie hat mir sehr geholfen, es funktioniert! *freu*
Wirklich ein Tolles Forum mit kompetenten Usern.
*daumen hoch*
MfG Sam