J'ai le code suivant qui applique un style XSLT
Test.Xml.xslTransform = function(xml, xsl) {
try {
// code pour IE
if (window.ActiveXObject) {
ex = xml.transformNode(xsl);
return ex;
}
// code pour Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument) {
xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
resultDocument = xsltProcessor.transformToFragment(xml, document);
return resultDocument;
}
} catch (exception) {
if (typeof (exception) == "object") {
if (exception.message) {
alert(exception.message);
}
} else {
alert(exception);
}
}
Le code fonctionne dans IE et Firefox mais pas dans Chrome et Safari. Des idées pourquoi?
Mise à jour
ResultDocument = xsltProcessor.transformToFragment(xml, document);
La ligne ci-dessus retourne null. Aucune erreur n'est lancée.
Mise à jour
Le code ne fonctionne pas car le fichier xslt contient xsl:include. Besoin de trouver un moyen de faire fonctionner l'inclusion. Je vais coller l'avancement ici
Mise à jour
Il a été recommandé d'utiliser le http://plugins.jquery.com/project/Transform/ plugin. J'essaie d'utiliser la librairie côté client car l'exemple d'inclusion fonctionne ici (http://daersystems.com/jquery/transform/).
Le code fonctionne dans IE mais toujours pas dans Chrome.
Test.Xml.xslTransform = function(xml, xsl) {
try {
$("body").append("");
var a = $("#test").transform({ xmlobj: xml, xslobj: xsl });
return a.html();
}
catch (exception) {
if (typeof (exception) == "object") {
if (exception.message) {
alert(exception.message);
}
} else {
alert(exception);
}
}
}
xml et xsl sont tous deux des objets passés en paramètres.
Mise à jour
J'ai essayé de changer le fichier XSL pour quelque chose de très simple sans inclusion et Chrome n'applique toujours pas la feuille de style et IE si. Le XSL qui est apporté en tant qu'objet est:
test
Mise à jour
Le résultat final que je veux est que le xsl soit appliqué au fichier xml. Le fichier xsl contient des inclusions. Je veux que le transfert se fasse de préférence côté client.
Updated Rupert pourrais-tu mettre à jour la question avec le xml et comment tu appelles Test.Xml.xslTransform ?
J'ai obtenu le xml en utilisant ie8
Le code est appelé comme suit:
xsl = Test.Xml.loadXMLDoc("/_layouts/xsl/xsl.xslt");
var doc = Test.Xml.xslTransform(xData.responseXML, xsl);
xData est le xml retourné par un service web.