【问题标题】:XSLT transformation issue in IE 11IE 11 中的 XSLT 转换问题
【发布时间】:2016-08-11 22:37:35
【问题描述】:

我正在尝试使用 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);
    }
}

【问题讨论】:

标签: jquery xml xslt


【解决方案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
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-16
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多