DarrenMedlem sedan dec. 2002789 inlägg 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?
JojoxxMedlem sedan juni 20004 308 inlägg
Darren skrev:
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.
Peter SMedlem sedan dec. 20025 483 inlägg
Det kan hända att Netscape 7.02 som är baserad på Mozilla 1.0.2 inte är tillräckligt färsk
Stämmer bra det. Minst 1.2 krävs.
Du kan även ta en titt på följande sida:
http://www.zoode.org/b2/index.php?p=30&c=1
:)
DarrenMedlem sedan dec. 2002789 inlägg Kanske var jag lite otydlig... :)
Det fungerar i Mozilla och NS 6 men inte i NS 7. Samma sak gäller setParameter() funktionen...
Menar ni då att det inte finns någon möjlighet att skicka parametrar till XSL filen i NS 7.+?
DarrenMedlem sedan dec. 2002789 inlägg 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:
processor.setParameter(null, "param_namn", "param_värde")
Någon som har något tips?
JojoxxMedlem sedan juni 20004 308 inlägg 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.
DarrenMedlem sedan dec. 2002789 inlägg Sitter precis och funderar på något sådant... :)
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.
DarrenMedlem sedan dec. 2002789 inlägg Nu har vi det...
<!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:
<xsl:param name="param_namn">dummy_värde</xsl:param>