Vi henter og behandler teksten og lager et document slik:
_getHTML
function doHTML(){
$.ajax({
url:"htmlpage.html",
success:function(data,status,xhr)
{
useHTML(xhr.responseText);
},
error:function(data)
{
document.getElementById("dumptext").innerHTML=
data.statusText;
}
});
}
function useHTML(T){
var parser = new DOMParser();
var doc = parser.parseFromString(T, "text/html");
var S=doc.getElementById("hentes").innerHTML;
document.getElementById("dumptext").innerHTML=S;
}
SVG
Vi henter en SVG-fil flagget.svg,
og presenterer den i sin helhet som et element på siden.
Vi behandler fila og lager et document slik:
_getSVG
function doSVG(){
$.ajax({
url:"flagget.svg",
success:function(data,status,xhr)
{
useSVG(xhr.responseText);
},
error:function(data)
{
document.getElementById("dumpflag").innerHTML
=data.statusText;
}
});
}
function useSVG(T){
var parser = new DOMParser();
var svgdoc = parser.parseFromString(T, "image/svg+xml");
var elt=document.getElementById("dumpflag");
// clear it (for second call)
elt.innerHTML="";
// forutsetter at svg har correct header: version and namespace
var svgNode=svgdoc.documentElement;
elt.appendChild(document.importNode(svgNode, true));
}
SVG2
Nå viser det seg at jQuery (best guess) parser svg-fila som XML, og vi kan forenkle koden slik:
_getSVG2
function doSVG2(){
$.ajax({
url:"flagget.svg",
success:function(data,status,xhr)
{
useSVG2(xhr.responseXML);
},
error:function(data)
{
document.getElementById("dumpflag2").innerHTML
=data.statusText;
}
});
}
function useSVG2(svgdoc){
var elt=document.getElementById("dumpflag2");
// clear it (for second call)
elt.innerHTML="";
// forutsetter at svg har correct header: version and namespace
var svgNode=svgdoc.documentElement;
elt.appendChild(document.importNode(svgNode, true));
}
Feilhandtering
XML-filer kan betraktes spå samme måte som SVG-eksempelet over, men vi må i begge tilfellene
ta høyde for at XML-strukturen ikke er riktig. Vi bruker en ren XML-fil til å se nærmere på dette.
Vi kan angripe dette på to måter: Vi kan hente fila som XML og sjekke hva vi får tilbake, eller vi kan lese
fila som text og ta oss av parsingen med DomParser selv. Det to eksemplene under demonstrerer dette.
Vi bruker i begge tilfellene denne enkle fila:
function doXML(adresse){
$.ajax({
url:adresse,
dataType:"xml",
success:function(data,status,xhr)
{
useXML(xhr.responseXML);
},
error:function(xhr,statusText,errorThrown)
{
//console.log("fail: ",statusText);
//console.log("fail: ",errorThrown);
var T=statusText+'<br/>'+errorThrown;
document.getElementById("dumpxml").innerHTML
=T.substring(0,100);
}
});
}
function useXML(xmldoc){
var elt=document.getElementById("dumpxml");
// clear it (for second call)
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;
}
Lese som text
Koden blir i dette tilfellet slik. Vi bruker den samme strategien som når vi hentet
XML-strukturen som text i modulen DOMParser.
_doXML
function doXML2(adresse){
$.ajax({
url:adresse,
dataType:"text",
success:function(data,status,xhr)
{
useXML2(xhr.responseText);
},
error:function(xhr,statusText,errorThrown)
{
var T=statusText+'<br/>'+errorThrown;
document.getElementById("dumpxml2").innerHTML
=T.substring(0,100);
}
});
}
function useXML2(Xmedlemmer){
var dumpelt=document.getElementById("dumpxml2");
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;
}
}