2011-05-04 157 views
2

我有一些JavaScript代碼,基於您使用的瀏覽器,將XSL轉換應用於某些接收到的XML。這適用於除IE9以外的所有瀏覽器。儘管在IE的邏輯中有一個規定(使用轉換節點而不是新的XSLTProcessor()),似乎IE9不再定義transformNode。Internet Explorer 9和XSLT

我一直在尋找一段時間,看看這是否對他人沒有任何好運的問題。這令人費解,讓我覺得我在做一些非常錯誤的事情。

這裏是與工作的代碼IE7/8(從jstree - 雖然略有修改爲清楚起見):

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

所有我能找到的關於IE9和XSLT是,「它已被更改爲更標準兼容」。我認爲這是指轉換完成的方式,而不是API。

回答

3

從jsTree的(它使用XSLT轉換到呈現XML源數據到樹)作者:

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