2011-05-04 4 views
2

J'ai un code javascript qui, en fonction du navigateur que vous utilisez, applique une transformation XSL à un code XML reçu. Cela fonctionne dans tous les navigateurs sauf IE9. Bien qu'il existe une disposition dans la logique pour IE (pour utiliser tranformNode au lieu de nouveau XSLTProcessor()) il semblerait que IE9 ne définit plus transformNode.Internet Explorer 9 et XSLT

J'ai cherché un peu de temps pour voir si c'est un problème pour les autres sans aucune chance. Ce qui est déroutant et me fait penser que je fais quelque chose de terriblement mal.

est ici le code qui fonctionne avec IE7/8 (de jstree - bien que légèrement modifié pour plus de clarté):

xm = document.createElement('xml'); 
xs = document.createElement('xml'); 
xm.innerHTML = xml; 
xs.innerHTML = xsl; 
xm.transformNode(xs.XMLDocument) 

Tout ce que je pouvais trouver au sujet de IE9 et XSLT est qu ' « il a été modifié pour être plus normes conforme ". Je pense que cela faisait référence à la façon dont les transformations ont été faites, pas tellement à l'API.

Répondre

3

De l'auteur de jsTree (qui utilise des transformations XSLT pour rendre les données source XML à l'arbre):

if(window.ActiveXObject) {  
    var xslt = new ActiveXObject("Msxml2.XSLTemplate"); 
    var xmlDoc = new ActiveXObject("Msxml2.DOMDocument"); 
    var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument"); 
    xmlDoc.loadXML(xml); 
    xslDoc.loadXML(xsl); 
    xslt.stylesheet = xslDoc; 
    var xslProc = xslt.createProcessor(); 
    xslProc.input = xmlDoc; 
    xslProc.transform(); 
    callback.call(null, xslProc.output); 
    return true; 
} 

http://code.google.com/p/jstree/issues/detail?id=907&q=IE9&colspec=ID%20Type%20Status%20Priority%20Owner%20Summary