Javascript ie9的transformNode函数

Javascript ie9的transformNode函数,javascript,jquery,html,xml,xslt,Javascript,Jquery,Html,Xml,Xslt,我需要在ie9或更高版本中使用xslt将一个xml文档转换为另一个xml文档 我试图在ie9中使用xslt转换xml文档。当我使用transformNode()函数时,它在ie8中运行良好(代码::resultDocument=XML.transformNode(XSL);),但在ie9中未定义transformNode函数,显示错误::SCRIPT438:对象不支持属性或方法“transformNode” 我找到了ie9的解决方案,如下所示 if (window.ActiveXObject)

我需要在ie9或更高版本中使用xslt将一个xml文档转换为另一个xml文档

我试图在ie9中使用xslt转换xml文档。当我使用transformNode()函数时,它在ie8中运行良好(代码::resultDocument=XML.transformNode(XSL);),但在ie9中未定义transformNode函数,显示错误::SCRIPT438:对象不支持属性或方法“transformNode”

我找到了ie9的解决方案,如下所示

if (window.ActiveXObject) {
                console.log('inside hi');
                var xslt = new ActiveXObject("Msxml2.XSLTemplate");
                var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
                xslDoc.loadXML(xsltDoc.xml);
                console.log(xslt.styleSheet);
                xslt.stylesheet = xslDoc;
                var xslProc = xslt.createProcessor();
                xslProc.input = xmlDoc;
                xslProc.transform();
                return xslProc.output;
            }
但是当我运行这个时,我得到一个错误:SCRIPT16389:样式表不包含文档元素。样式表可能为空,也可能不是格式良好的XML文档。

我不熟悉javascript/jquery。谁能帮我解决这个问题。如果javascript或jquery中有任何其他函数,这将非常有用


提前感谢早期版本的IE,
responseXML
文档过去是MSXML DOM文档,MSXML实现XSLT和
transformNode
。对于较新的IE版本,
responseXML
文档为您提供了一个IE DOM文档,IE没有为其DOM文档/节点实现XSLT和
transformNode
。IE DOM文档也没有您试图在
xslDoc.loadXML(xsltDoc.xml)中使用的属性
xml

尝试将代码的该部分更改为

if (typeof XMLSerializer !== 'undefined') {
  xslDoc.loadXML(new XMLSerializer().serializeToString(xsltDoc));
  // now use xslDoc here
}
另一种选择是使用
xslDoc.loadXML(xmlHttp.responseText)如果您仍然可以访问XMLHttpRequest。还有一个选项可以确保获得MSXML responseXML,请参见
try{xhr.responseType='MSXML文档';}catch(e){}
line in


在代码中检查对象的整个方法都是错误的,请检查要使用的对象、属性或方法(例如,
if(typeof XSLTProcessor!==“undefined”){//now use XSLTProcessor here}
),不适用于完全不同的对象,如
document.implementation
我也有
脚本16389:样式表不包含document元素。样式表可能为空,也可能不是格式良好的XML文档,IE9/10/11中出现错误。我发现了以下修复方法:

您的代码:

if (window.ActiveXObject) {
    console.log('inside hi');
    var xslt = new ActiveXObject("Msxml2.XSLTemplate");
    var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");

    xslDoc.loadXML(xsltDoc.xml);

    console.log(xslt.styleSheet);
    xslt.stylesheet = xslDoc;
    var xslProc = xslt.createProcessor();
    xslProc.input = xmlDoc;
    xslProc.transform();
    return xslProc.output;
 }
工作代码:

if (window.ActiveXObject) {
    console.log('inside hi');
    var xslt = new ActiveXObject("Msxml2.XSLTemplate");
    var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");

    xslDoc.load(xsltDoc);

    console.log(xslt.styleSheet);
    xslt.stylesheet = xslDoc;
    var xslProc = xslt.createProcessor();
    xslProc.input = xmlDoc;
    xslProc.transform();
    return xslProc.output;
 }

更改为第6行-将“loadXML”替换为“load”,将“xsltDoc.xml”替换为“xsltDoc”。让我知道进展如何

您从哪里获得
XML
文档?