2013-12-09 86 views
1

我正在嘗試使用XSLT轉換XML。 它工作完全在FF,Chrome,IE高達10. 但在IE-11它不工作。 這是我正在使用的示例代碼。IE 11中的XSLT轉換問題

function TransformXML(XmlPath, XsltPath) { 
    xml = loadXMLDoc(XmlPath); 
    xsl = loadXMLDoc(XsltPath); 
    // code for IE 
    if (window.ActiveXObject || "ActiveXObject" in window){ 
     ex = xml.transformNode(xsl); 
     $('#divId').html(ex); 
    } 
     // code for Mozilla, Firefox, Opera, etc. 
    else if (document.implementation && document.implementation.createDocument) { 
     //alert("In"); 
     xsltProcessor = new XSLTProcessor(); 
     xsltProcessor.importStylesheet(xsl); 
     var xmldom = xsltProcessor.transformToDocument(xml); 
     var serializer = new XMLSerializer(); 
     var transformed = serializer.serializeToString(xmldom.documentElement); 
     $('#divId').html(transformed); 
    } 
} 
+0

... http://stackoverflow.com/questions/19638981/window-activexobject-difference-in-ie11 –

回答

1

我想這個問題是在loadXMLDoc(XsltPath),所以我們需要看到的是函數的代碼。 IE用於返回MSXML DOM文檔爲responseXML,MSXML支持帶有transformNode的XSLT。最近的IE版本返回的IE DOM文檔爲responseXML,不支持XSLT(也不支持transformNode也不支持)。如果您想使用XSLT並使用XMLHttpRequest加載樣式表代碼,那麼您需要

function loadXMLDoc(url) { 
    if (typeof XMLHttpRequest !== 'undefined') 
    { 
    var xhr = new XMLHttpRequest(); 
    xhr.open(method, url, false); 
    // request MSXML responseXML for IE 
    try { xhr.responseType = 'msxml-document'; } catch(e){} 
    xhr.send(); 
    return xhr.responseXML; 
    } 
    else { 
    try { 
     var xhr = new ActiveXObject('Msxml2.XMLHTTP.3.0'); 
     xhr.open('GET', url, false); 
     xhr.send(); 
     return xhr.responseXML; 
    } 
    catch (e) { 
     // handle case that neither XMLHttpRequest nor MSXML is supported 
    } 
    } 
} 
+0

感謝馬丁的迴應。這對我有效。 –