IE 11中的XSLT转换问题

时间:2013-12-09 07:36:25

标签: jquery xml xslt

我正在尝试使用XSLT转换XML。     它在FF,Chrome,IE上的效果非常好,最高可达10。     但在IE-11中它不起作用。     这是我正在使用的示例代码。

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);
    }
}

1 个答案:

答案 0 :(得分: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
    }
  }
}