Archief - XML: Werkt niet in opera , ligt wss aan XSL ..

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

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 :p

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

Disa

Legacy Member
Opera ondersteunt spijtig genoeg nog geen XSL transformaties. :(

*edit: over wat moet uw webshop deze keer gaan? :p

Jonathan

Legacy Member
Disa zei:
Opera ondersteunt spijtig genoeg nog geen XSL transformaties. :(

*edit: over wat moet uw webshop deze keer gaan? :p

Een online reisbureau gestuurd door XML :ironic:

Damn jammer dat dat niet werkt in Opera :/

Disa

Legacy Member
Mhhz het zou in de 9 moeten werken.

Opera site zei:
Opera 9
XSLT, XPath, and XSL-FO

Opera supports XSLT 1.0 and XPath 1.0 with the following exceptions:
The namespace-alias element is not supported
The Nan, per-mille, minus-sign, and percent attributes for the decimal-value element are not supported
The case-order attribute for the sort element is not supported
The document() function is not supported.

In addition the exsl:node-set() function is supported.

Opera does not support XSL Formatting Objects.

Maar bij mij werkte het toch niet :p
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan