Hvordan får man fat i indholdet af sin XML-fil?





Læsning af XML-filer

En ting er at få lavet sin XML-fil, noget andet er at få fat i data. Extraktion af data fra en XML-fil foregår i to trin:
  1. Indlæsning af databasen (gennemgås på denne side)
  2. Søgning i/læsning af den indlæste fil (gennemgås på de næste sider)
Læsning af XML-filer er et af de steder hvor forskellene i de underliggende browserteknologier slår igennem. Internet Explorer anvender det der hedder ActiveXObject og de andre browsere anvender XMLHttpRequest, så her skal man starte med at spørge, ikke på browsertypen, som man skulle forvente, men om browseren kører ActiveXObject eller XMLHttpRequest. Den fulde kode ser således ud:

function loadXMLDoc(dname)
{
var xmlDoc;
if (window.ActiveXObject) {
     xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
     xmlDoc.async = "false";
     }
else if (window.XMLHttpRequest) {
     xmlDoc=new window.XMLHttpRequest();
     xmlDoc.open("GET",dname,false);
     xmlDoc.send("");
     return xmlDoc.responseXML.documentElement;
     }
else {
     alert('Din browser kan ikke køre dette script');
     }
xmlDoc.async=false;
xmlDoc.load(dname);
return(xmlDoc);
}

Som koden er skrevet her, er den lavet til at kalde som en separat .js-fil. Jeg har den altid til at ligge som loadXMLDoc.js i et directory der hedder JavaScripts. De sider, hvor jeg skal læse en XML-fil, har jeg så i head-tag'en flg. indlæsning af script-filen:

<SCRIPT TYPE="text/javascript" SRC="JavaScripts/LoadXMLDoc.js">

Scriptet bliver herved loadet sammen med de andre metadata, når siden bliver indlæst, og man kan nu eksekvere den når man ønsker det og få den til at læse den XML-fil man specificerer. Denne metode er mest anvendelig, hvis man har et site hvor man læser fra flere XML-filer. Hvis man kun har den ene fil der skal læses fra, kan man skrive dette direkte, i stedet for variablen dname. For XML-filen MinXML-fil.xml vil koden nu se således ud:

function loadXMLDoc()
{
var xmlDoc;
if (window.ActiveXObject) {
     xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
     xmlDoc.async = "false";
     }
else if (window.XMLHttpRequest) {
     xmlDoc=new window.XMLHttpRequest();
     xmlDoc.open("GET","MinXML-fil.xml",false);
     xmlDoc.send("");
     return xmlDoc.responseXML.documentElement;
     }
else {
     alert('Din browser kan ikke køre dette script');
     }
xmlDoc.async=false;
xmlDoc.load("MinXML-fil.xml");
return(xmlDoc);
}

BEMÆRK! Der er flere browsertyper, der ikke kan udføre denne læsning af XML-filer, med mindre det foregår på en web-server. Hvis man tester scriptet mens man arbejder på sin harddisk eller evt. serverdrev, vil det fungere fint på Firefox, på Internet Explorer vil det fungere for nogle versioner og Chrome og Safari fungerer det slet ikke. Det er ikke en fejl i programmeringen, men en begrænsning i de teknologier der får browserne til at fungere som de gør.

Alternativer til XMLHttpRequest: Man ser fra tid til anden et alternativ til XMLHttpRequest til læsning af XML-filer. Den ser således ud:

if (document.implementation && document.implementation.createDocument) {
     xmlDoc = document.implementation.createDocument("", "", null);
     xmlDoc.load(dname);
     }

Min erfaring er, at den ikke fungerer til alle browsere, så jeg vil anbefale at anvende XMLHttpRequest.