Der Versuch, XSLT Stylesheet zu rendern, das von API stammt, dachte, es funktioniert gut in Chrome, FF außer IE.XSLT funktioniert nicht auf IE 11, transformiert nicht xml
Ich habe versucht, das Beispiel von w3c, die funktioniert, aber das ist der Aufruf der XML-und XSLT aus einer Datei, wo meiner stammt von AJAX Anruf Erfolg Antwort.
W3school Probe XSLT sample
Meine Version ist dies
function getJson() {
$.get(url)..
var json2XMLResult = J2XML.json2xml_str(data);
getResultXsl(json2XMLResult)
}
function getResultXsl(json2xml) {
$.get(url)
.then(function (data) {
let resDefinition = data.Results.ResponseDisplayDefinition;
let xmlString = '<?xml version="1.0"?><Response>' + json2xml + '</Response>';
if (typeof DOMParser != "undefined") {
parseXml = function (xmlStr) {
return (new DOMParser()).parseFromString(xmlStr, "text/xml");
};
}
else if (typeof ActiveXObject != "undefined" &&
new ActiveXObject("Microsoft.XMLDOM")) {
parseXml = function (xmlStr) {
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(xmlStr);
return xmlDoc;
};
}
else {
throw new Error("No XML parser found");
}
displayResult(xmlString, resDefinition);
})
}
XSLT in dem HTML-Code angezeigt, die alert()
unten nicht zeigen, ob Sie es auf Chrome oder Internet Explorer zu machen, sind versucht
function displayResult(xmlStrToConvert, xslStrToConvert) {
var xmlConverted = parseXml(xmlStrToConvert);
var xslConverted = parseXml(xslStrToConvert);
if (window.ActiveXObject || "ActiveXObject" in window) {
alert('It is IE but not showing anything');
var ex = xmlConverted.transformNode(xslConverted)
$('#xmlJson').append(ex);
} else {
alert('its not IE');
// code for Chrome, Firefox, Opera, etc.
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xslConverted);
var resultDocument = xsltProcessor.transformToFragment(xmlConverted, document);
$('#xmlJson').append(resultDocument);
}
}
Auch versucht var ex= xmlConverted.transformToFragment(xslConverted, document);
Kann jemand darauf hinweisen, was damit nicht stimmt? Außerdem konnte ich das Dev-Tool auf IE11 nicht öffnen, was schwieriger zu debuggen ist, aber ich kann etwas falsch mit meinem Code oben sagen.
bearbeiten Ajax-Aufruf mit beforeSend
kann jemand überprüfen, ob der folgende Code in Ordnung ist, wenn die transformNode()
ist Object doesn't support property or method 'transformNode'
oder XSLTProcessor()
nicht definiert
function transformXML(json2xml) {
$.ajax({
type: 'GET',
url: window.parent.__env.apiManagement + 'Preview/TypeDefinition?objectName=' + apiObjectResponse,
beforeSend: function (xhr, settings) {
if (window.ActiveXObject) {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
else {
xhr = new XMLHttpRequest();
}
try { xhr.responseType = "msxml-document"; } catch (err) { }
},
success: function (data, status, xhr) {
var parseXml = new DOMParser();
var xslStylesheet = parseXml.parseFromString(data.Results.ResponseDisplayDefinition, "text/xml");
var xmlString = '<?xml version="1.0"?><Response>' + json2xml + '</Response>';
var convertedXML = parseXml.parseFromString(xmlString, "text/xml");
// // cross-browser logic omitted for simplicity
if(window.ActiveXObject || xhr.responseType == "msxml-document") {
var ex = convertedXML.transformNode(xslStylesheet);
console.log('>>> ', convertedXML)
alert(xmlString)
$('#xmlJson').append(ex);
}
// code for Chrome, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument) {
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xslStylesheet);
var resultDocument = xsltProcessor.transformToFragment(convertedXML, document);
$('#xmlJson').append(resultDocument);
}
}
});
}
Haben Sie die Konsole auf einen Fehler hin überprüft, der auf das Problem hinweist? –
Sie können die Entwicklungswerkzeuge nicht öffnen? Öffnen Sie es, bevor Sie die Seite öffnen? – epascarello
konnte Konsole aus irgendeinem Grund nicht öffnen IE, es stürzt weiter ab:/aber wenn ich das Beispiel von W3C versuchte funktioniert es perfekt. – MrNew