template

Index :: Javascript :: XML-Dateien lesen

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:
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:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<people>
  <person>
    <name>Dagobert Duck</name>
    <job>Multimilliardär</job>
  </person>
  <person>
    <name>Micky Maus</name>
    <job>Globetrotter</job>
  </person>
  <person>
    <name>Gustav Gans</name>
    <job>Glückspilz</job>
  </person>
  <person>
    <name>Daniel Düsentrieb</name>
    <job>Erfinder</job>
  </person>
</people>
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:

Index :: Javascript


template