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