Vi lager oss en enkel, komplett webside som en Javaskript-string.
(\ bak hver linje for å få en sammenhengende text på flere linjer)
_page.js
var THTML='<!DOCTYPE HTML>\
<html lang="no">\
<head>\
<title>readme</title>\
<meta charset="UTF-8"/>\
</head>\
<body>\
<div id="findme">\
OK, her er det\
</div>\
</body>\
</html>';
Vi behandler teksten og lager et document slik:
_doHTML
function doHTML(){
var parser = new DOMParser();
var doc = parser.parseFromString(THTML, "text/html");
var S=doc.getElementById("findme").innerHTML;
document.getElementById("dumptext").innerHTML=S;
}
XML
Vi lager oss et enkelt XML-dokument, som en javaskript-string:
function doXML(){
var parser = new DOMParser();
var xmldoc = parser.parseFromString(medlemmer,
"application/xml");
var elt=document.getElementById("dumpxml");
elt.innerHTML="";
var resT="";
var path='//medlem/navn';
var nodes=xmldoc.evaluate(path, xmldoc, null,
XPathResult.ANY_TYPE, null);
var result=nodes.iterateNext();
var resT="";
while(result){
resT+=result.childNodes[0].nodeValue + "</br>";
result=nodes.iterateNext();
}
elt.innerHTML=resT;
}
SVG
Vi lager oss et enkelt SVG-element, som en javaskript-string:
function doSVG(){
var parser = new DOMParser();
var svgdoc = parser.parseFromString(flagget,
"image/svg+xml");
var elt=document.getElementById("dumpflag");
elt.innerHTML="";
// forutsetter at svg har correct header: version and namespace
var svgNode=svgdoc.documentElement;
elt.appendChild(document.importNode(svgNode, true));
}
Feilhandtering
Det er desverre slik at DOMParser metoden parseFromString
ikke kaster noen feilmelding (exception). Vi skal neden for se hvordan vi
finne ut om noe går galt. Ingen garantier for at dette vil være vantett.
HTML
HTML-parsingen er svært tolerant og aksepterer store avvik fra velformet HTML/XML,
akkurat som vi kjenner det fra parsing av websider i sin allminnelighet
Vi lager oss en meningsløs text og forsøker å behandle den som en HTML-side.
_Xpage.js
var XTHTML='jabado<div id="findme">tja</dav>';
Vi kan vanskelig lage en dårligere innramming av det elementet vi leter etter,
og finner.
Vi behandler teksten og lager et document slik:
_doXHTML
function doXHTML(){
var dumpElt=document.getElementById("Xdumptext");
try{
var parser = new DOMParser();
var doc = parser.parseFromString(XTHTML, "text/html");
var S=doc.getElementById("findme").innerHTML;
dumpElt.innerHTML=S;
}
catch(e){
console.log(e);
dumpElt.innerHTML=e;
}
}
XML
XML-parsing er pr definisjon ikke tolerant i det hele tatt.
Vi forventer og forlanger velformet XML. Nr parseren ikke fikser jobben returnerer
den en XML-fil med feilbeskrivelse.
Vi må altså kunne gjenkjenne denne XML-fila. Vi kan gjøre dette ved å identifisere
rotelementet som <parsererror>.
Vi lager oss et XML-dokument med en enkel feil (medlam i stedet for medlem),
som en Javaskript-string:
function doXXML(){
var dumpelt=document.getElementById("Xdumpxml");
dumpelt.innerHTML="";
try{
var parser = new DOMParser();
var xmldoc = parser.parseFromString(Xmedlemmer,
"application/xml");
var docelt=xmldoc.documentElement;
// something wrong ?
if(docelt.nodeName=="parsererror"){
var T=docelt.firstChild.textContent;
throw(T);
}
// it is ok
var resT="";
var path='//medlem/navn';
var nodes=
xmldoc.evaluate(path, xmldoc, null,
XPathResult.ANY_TYPE, null);
var result=nodes.iterateNext();
var resT="";
while(result){
resT+=result.childNodes[0].nodeValue + "</br>";
result=nodes.iterateNext();
}
dumpelt.innerHTML=resT;
}
catch(T){
T=T.replace(new RegExp('<', 'g'), '<')
.replace(new RegExp('>', 'g'), '>');
console.log(docelt,T);
dumpelt.innerHTML=T;
}
}