Jonathan
Legacy Member
Hoi ,
Zou iemand even kunnen chekken waarom dit mogelijk niet werkt in Opera ?
Google heb ik nix gevonden en zou graag dit ook laten werken in Opera .. let niet op het onderwerp , is gewoon een testje
XML :
XSL :
HTML :
JS :
Ik gebruik de volgende XML XSL parser :
Alvast bedankt voor enige hulp , tips en info !
Mvg
Zou iemand even kunnen chekken waarom dit mogelijk niet werkt in Opera ?
Google heb ik nix gevonden en zou graag dit ook laten werken in Opera .. let niet op het onderwerp , is gewoon een testje
XML :
Code:
<winkel>
<product toevoegingsdatum="02042007" type="meubel">
<naam>kast</naam>
<prijs>53</prijs>
<beschrijving>iets om dingen in te stoppen</beschrijving>
</product>
<product toevoegingsdatum="02092006" type="meubel">
<naam>stoel</naam>
<prijs>19</prijs>
<beschrijving>iets om op te zitten</beschrijving>
</product>
<product toevoegingsdatum="02042006" type="meubel">
<naam>tafel</naam>
<prijs>118</prijs>
<beschrijving>iets om dingen op te zetten</beschrijving>
</product>
<product toevoegingsdatum="03032007" type="meubel">
<naam>bed</naam>
<prijs>99</prijs>
<beschrijving>iets om in te liggen</beschrijving>
</product>
Enz. afgesloten door </winkel>
XSL :
Code:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>producten</title>
</head>
<body>
<xsl:for-each select="winkel/product">
<xsl:value-of select="naam"></xsl:value-of><br />
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
HTML :
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="index.css" type="text/css" rel="stylesheet" />
<script src="index.js" type="text/javascript"></script>
<script src="XMLXSLTparser.js" type="text/javascript"></script>
<title>XML inladen</title>
</head>
<body onload="transformXMLXSL('producten.xml' , 'producten.xsl');">
<div id="contentwrap">
<div id="menu">
<ul>
<li><a href="#">meubelen</a></li>
<li><a href="#">fruit</a></li>
<li><a href="#">software</a></li>
<li><a href="#">hardware</a></li>
</ul>
</div>
<div id="content">
</div>
</div>
</body>
</html>
JS :
Code:
function transformXMLXSL(xmlURL , xslURL) {
var sTransformation = transformXML(xmlURL , xslURL);
document.getElementById("content").innerHTML = sTransformation;
}
Ik gebruik de volgende XML XSL parser :
Code:
function parseXML(sFileName) {
if (navigator.userAgent.indexOf("MSIE") != -1) {
//1A. IE : een instantie van het DOM document aanmaken
oDomDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
oDomDoc.validateOnParse=true //default : true
}
if ( (navigator.appName =='Netscape') && ( navigator.userAgent.indexOf('Opera') == -1) ) {
//1B.Mozilla:een instantie van het DOM document aanmaken
oDomDoc = document.implementation.createDocument("MijnNS", "rootElement",null);
//voor snelheid van parsing: een eventlistener toevoegen
oDomDoc.addEventListener("load", documentLoaded, false);//NN alternatief op oDom.async
}
//2.opladen in het geheugen
oDomDoc.async = false; // true = wacht niet op volledige parsing
oDomDoc.validateOnParse=true ;
oDomDoc.load(sFileName);
documentLoaded("");
return oDomDoc
}
function documentLoaded(e) {
var sXML ; var sErrorXML ;
//3A. foutdetectie IE
if (navigator.userAgent.indexOf("MSIE") != -1) {
sErrorXML = oDomDoc.parseError;
if (sErrorXML.errorCode != 0 ) {
alert( sErrorXML.reason + '\n Line ' + sErrorXML.line ) ;
} else {
sXML =oDomDoc.xml
}
}
// 3B.foutdetectie NN
if ( (navigator.appName =='Netscape') && ( navigator.userAgent.indexOf('Opera') == -1) ) {
//Mozilla voorziet actueel geen XML validatie (DTD/Schema)
if (oDomDoc.documentElement.nodeName == "parsererror") {
var oXMLSerializer = new XMLSerializer();
sErrorXML= oXMLSerializer.serializeToString(oDomDoc);
alert (sErrorXML);
} else {
// test purposes only- object naar string convertor
var oSerializer = new XMLSerializer();
var sXML = oSerializer.serializeToString(oDomDoc);
//alert (sXML)
}
}
//4. test en dugging purposes only : show loaded XML file
//alert (sXML);
//alert (oDomDoc.documentElement.nodeName + " is loaded .") ;
}
function transformXML( xmlURL , xslURL) {
//5. Parsen van de XML file :
oDomDocXML = parseXML(xmlURL) ;
//6. Parsen van de XSL file :
oDomDocXSL = parseXML(xslURL) ;
//7. transformatie uitvoeren
var processor ;
var sNewDocument ;
if ( (navigator.appName =='Netscape') && ( navigator.userAgent.indexOf('Opera') == -1) ) {
processor = new XSLTProcessor();
processor.importStylesheet(oDomDocXSL);
newDocument = processor.transformToDocument(oDomDocXML);
var oSerializer = new XMLSerializer(); // blijft anders een (HTML) object .
sNewDocument = oSerializer.serializeToString(newDocument);
} else {
sNewDocument = oDomDocXML.transformNode(oDomDocXSL)
}
//test and debugging purposes only
//alert ( sNewDocument) // transformed document
return sNewDocument
}
function transformXMLp( xmlURL , xslURL , sParam1 , sAppLocation) {
var sNewDocument ;
//5. Parsen van de XML file :
oDomDocXML = parseXML(xmlURL) ;
//6. Parsen van de XSL file :( must FreeThreaded )
oDomDocXSLf = parseXML(xslURL) ;
//7. Aanmaak transformatie processor
if ( (navigator.appName =='Netscape') && ( navigator.userAgent.indexOf('Opera') == -1) ) {
var xsltProc = new XSLTProcessor();
xsltProc .importStylesheet(oDomDocXSLf);
// parameter(s) toevoegen
xsltProc .setParameter( null,"parameter",sParam1) ; //namespace, localName , value
xsltProc .setParameter( null,"appLocation",sAppLocation) ; //namespace, localName , value
oNewDocument = xsltProc.transformToDocument(oDomDocXML);
var oSerializer = new XMLSerializer(); // blijft anders een (HTML) object .
sNewDocument = oSerializer.serializeToString(oNewDocument);
} else {
var xslt = new ActiveXObject("Msxml2.XSLTemplate");
xslt.stylesheet = oDomDocXSLf;
var xslProc = xslt.createProcessor();
//8. Input voorzien van XML document & parameter(s)
xslProc.input = oDomDocXML;
//alert("Parameter:" + sParam1) ;
xslProc.addParameter("parameter", sParam1);
//9. transformatie uitvoeren
xslProc.transform();
sNewDocument = xslProc.output // prerendering noodzakelijk alvorens return
}
//alert(sNewDocument)
return (sNewDocument);
}
function showInWindow(sNewDocument, iWidth, iHeight , iLeft , iTop ) {
var newWindow = window.open("", "XSL_Transformation", 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=auto, resizable=yes,copyhistory=yes,width='+iWidth+',height='+iHeight+', left='+iLeft+', top='+iTop+'');
newWindow.document.write(sNewDocument);
newWindow.document.close();
}
function getAppLocation() {
//FF verwacht het fullpath bij local rendering
applicationLocation= unescape(document.location.href.substring(0 , location.href.lastIndexOf("/")+1)); // substring 10 wo disk
return applicationLocation
}
Alvast bedankt voor enige hulp , tips en info !
Mvg
