Någon som kan hjälpa mig med följande koden? Koden laddar in XSL och XML filen som skall visas på sidan.
var processor = new XSLTProcessor();
var myXSL = document.implementation.createDocument("", "test", null);
myXSL.addEventListener("load", onload, false);
myXSL.load("style.xsl");
function onload() {
// Denna raden bryter NS 7 på...
processor.importStylesheet(myXSL);
// Här under skall man ladda in XML filen som man vill presentera
...
}
Får detta felmeddelandet:
processor.importStylesheet is not a function
Någon som vet en motsvarighet till imortStylesheet() funktionen som då fungerar i NS?
Någon som vet en motsvarighet till imortStylesheet() funktionen som då fungerar i NS?
Detta ÄR en Mozilla funktion, men du har antagligen en för gammal version av din webbläsare. Installerar du den senaste (icke alpha-versionen) av Mozilla 1.3 så fungerar det. Det kan hända att Netscape 7.02 som är baserad på Mozilla 1.0.2 inte är tillräckligt färsk.
Denna koden fungerar i Mozilla 1.3 och Netscape 7.
var processor = new XSLTProcessor();
var myXSL = document.implementation.createDocument("", "test", null);
myXSL.addEventListener("load", onload, false);
myXSL.load("style.xsl");
function onload(){
if (!processor.importStylesheet){
// Netscape koden
var out = document.implementation.createDocument("text/html","",null);
// Ladda in XML filen
...
// Gör transformationen
var newDocument = processor.transformDocument(myXML, myXSL, out, null);
}
else{
processor.importStylesheet(myXSL);
// Ladda in XML filen
....
// Gör transformationen
var newDocument = processor.transformToFragment(myXML, document);
}
}
Dock återstår problemet med att skicka parameters till XSL filen.
I Mozilla kan man använda:
Nej, tyvärr. Efter vad jag läst är setParameter() precis som Peter säger introducerad i Mozilla 1.2.
En tänkbar lösning kanske kunde vara att sätta dina parametrar via DOM i det transformerade resultatet. Om du vill kan du ju posta dina tillhörande xsl/xml-filer.
När man gör myXSL.load("xsl_fil.xsl") så får man ju ett DOM dokument. I en sådan borde det vara möjligt att använda setAttribute() funktionen och på så sätt sätta parametern...
Skall testa detta lite så skickar jag resultatet om det fungerar.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/strict.dtd">
<html>
<head>
<title>Netscape/Mozilla - XML/XSL/JavaScript test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
var myXML;
var processor = new XSLTProcessor();
var myXSL = document.implementation.createDocument("", "test", null);
myXSL.addEventListener("load", loadXML, false);
myXSL.load("xsl_fil.xsl");
function loadXML() {
myXML = document.implementation.createDocument("", "test", null);
myXML.addEventListener("load", doTrans, false);
myXML.load("xml_fil.xml");
}
function doTrans(){
if (!processor.importStylesheet){
var out = document.implementation.createDocument("", "test", null);
myXSL.getElementsByTagName("param")[0].childNodes[0].nodeValue = "param_värde";
var newDocument = processor.transformDocument(myXML, myXSL, out, null);
var result = out.lastChild;
document.getElementById("result").appendChild(result);
}
else{
processor.importStylesheet(myXSL);
/*
I Mozilla har vi två val. Att använda samma kod som i NS
myXSL.getElementsByTagName("param")[0].childNodes[0].nodeValue = "param_värde";
eller Mozillas egen funktion setParameter()
*/
processor.setParameter(null, "param_namn", "param_värde");
var newDocument = processor.transformToFragment(myXML, document);
document.getElementById("result").appendChild(newDocument);
}
}
</script>
</head>
<body id="result" style="margin: 20px;">
<!-- Här kommer resultatet att hamna... -->
</body>
</html>
För att parametersättningen skall fungera med NS metoden måste parametern deklareras så här i XSL filen: