Zwar besitzt Javascript aus Sicherheitsgründen keine Schreibrechte auf Dateien (abgesehen von Cookies), allerdings sind Lesezugriffe teilweise durchaus erlaubt und auch notwendig - beispielsweise beim Parsen des eigenen HTML-Dokuments.
Moderne Browser können auch die DOM-Struktur externer XML-Dokumente lesen und manipulieren, jedoch ist auch hier die Speicherung von Änderungen nicht gestattet.
Das Vorgehen beim Öffnen einer XML-Datei ist browserabhängig:
Mozilla-basierte Browser verwenden das document.implementation-Objekt
MSIE verwendet ein ActiveXObject
Entsprechender Code könnte in etwa aussehen wie folgt:
//globales XML-Objekt
var xmlDoc=null;
//Funktion zum Öffnen; mit Browserweiche durch Object-detection
// file = Name der XML-Datei
// func = Lesefunktion, die nach erfolgreichem Import aufgerufen werden soll
function LoadXML(file,func) {
if (document.implementation && document.implementation.createDocument) { //---- moz
xmlDoc=document.implementation.createDocument('','',null);
xmlDoc.onload=func;
} else if (window.ActiveXObject) { //---- ie
xmlDoc=new ActiveXObject('Microsoft.XMLDOM');
xmlDoc.onreadystatechange=function() { if (xmlDoc.readyState==4) func(); };
} else return false;
xmlDoc.load(file); return true;
}
//Lesefunktion
function ReadXML() {
// ... Auslesen der XML-Struktur ...
}
//Importversuch
if (!LoadXML('people.xml',ReadXML)) alert('Browser kann externe XML-Dateien nicht lesen');
Als Beispiel soll die Datei people.xml gelesen werden, die folgenden Aufbau hat:
Im Header ist hier das Attribut encoding="ISO-8859-1" angegeben, weil der Nutztext Umlaute enthält.
Da im vorliegenden Fall die Tag-Namen bekannt sind, könnte man die Arrays der Personennamen und Jobs (ermittelt durch getElementsByTagName) direkt per Schleife auslesen und deren Textinhalt (ermittelt durch firstChild.nodeValue) sammeln:
function ReadXML() {
var name=xmlDoc.getElementsByTagName('name');
var job=xmlDoc.getElementsByTagName('job')
var s='Anzahl: '+name.length+'\n';
for (var i=0;i<name.length;i++) {
s+=(i+1)+' - '+ name[i].firstChild.nodeValue +' ('+ job[i].firstChild.nodeValue +')\n';
}
document.getElementById('taDump').value=s; //Ausgabe in Textarea
}
Nach Drücken des Anzeigen-Buttons wird versucht, die XML-Datei zu importieren und die Namen/Jobs der Personen in die Textarea auszugeben: