Salut,
J'ai écris un code en javascript pour parser un fichier xml avec un xsl et afficher le résultat dans un div. J'ai écris ce code pour qu'il fonctionne sur tous les browsers.
Maintenant, il a fonctionné sous IE, Firefox et Opera.
Quand j'ai testé sous Netscape 7.2 il se plante dans la ligne de code xslDoc.load(xsl);
Aussi sous Safari, il n'a pas fonctionné.
Voici mon code js
function parserXml(xml, xsl, target, params){
// code for IE
if (window.ActiveXObject){
var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
xslDoc.async = false;
xslDoc.load(xsl);
//Chargement du document XML
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
xmlDoc.async = false;
xmlDoc.load(xml);
var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0");
xslt.stylesheet = xslDoc;
var xslProc;
xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;
for (parm in params) {
//alert(parm);
if (typeof parm != "function")
xslProc.addParameter(parm, params[parm]);
}
xslProc.transform();
document.getElementById(target).innerHTML=xslProc.output;
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument){
xmlDoc=document.implementation.createDocument("","",null);
xmlDoc.async=false;
xmlDoc.load(xml);
xslDoc = document.implementation.createDocument("","",null);
xslDoc.async=false;
xslDoc.load(xsl);
var xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(xslDoc);
for (parm in params) {
if (typeof parm != "function")
xsltProcessor.setParameter(null,parm, params[parm]);
}
resultDocument = xsltProcessor.transformToFragment(xmlDoc,document);
document.getElementById(target).appendChild(resultDocument);
}
}
et voici mon fichier xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlnssl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlnsalan="http://xml.apache.org/xslt" >
<xsl:param name="RHDBURL" />
<xsl:param name="Lang" select="F" />
<xsl:template match="/">
<xsl:apply-templates select="//viewentry"/>
</xsl:template>
<xsl:template match="viewentry[@children and not(contains(@position,'.'))]">
</xsl:template>
<xsl:template match="viewentry[entrydata/@name = 'place']">
<div style='border-bottom: solid 1px #AAAAAA; margin-top:15px;'>
<xsl:choose>
<xsl:when test="string-length(normalize-space(entrydata))=0" >
Not Categorized
</xsl:when>
<xsl:otherwise>
<div style='border-bottom: solid 1px #AAAAAA; margin-top:15px;'>
<xsl:value-of select="entrydata/text"/>
</div>
</xsl:otherwise>
</xsl:choose>
</div>
</xsl:template>
<xsl:template match="viewentry[not(@children)]">
<xsl:apply-templates select="entrydata"/>
</xsl:template>
<xsl:template match="entrydata">
<xsl:apply-templates select="textlist"/>
<xsl:apply-templates select="text"/>
<xsl:apply-templates select="numberlist"/>
<xsl:apply-templates select="number"/>
</xsl:template>
<xsl:template match="textlist">
<xsl:apply-templates select="text"/>
</xsl:template>
<xsl:template match="text">
<div class='rh_sys-01p1'>
<A>
<xsl:attribute name="href">
<xsl:value-of select="concat(concat($RHDBURL,.),'?OpenDocument&L=',$Lang)" />
</xsl:attribute>
<xsl:value-of select="." disable-output-escaping="yes"/>
</A>
</div>
</xsl:template>
<xsl:template match="numberlist">
<xsl:apply-templates select="number"/>
</xsl:template>
<xsl:template match="number">
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>
</xsl:stylesheet>
Partager