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