API에서 오는 XSLT 스타일 시트를 렌더링 하려는데 IE에서는 Chrome을 제외한 FF에서는 정상적으로 작동한다고 생각했습니다.XSLT가 IE 11에서 작동하지 않고 xml을 변환하지 않습니다.
작동하는 w3c의 예제를 사용했지만 파일에서 XML 및 XSLT를 호출하고 있는데, 여기서 광산은 AJAX 호출 성공 응답에서 나옵니다.
W3school 샘플 XSLT sample 내 버전이
html로에서 XSLT를 표시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);
})
}
아래 alert()
당신은 크롬이나 IE에 렌더링하기 위해 노력하고 있는지 보여 않는,
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);
}
}
입니다
시도해보기 var ex= xmlConverted.transformToFragment(xslConverted, document);
누군가가이 문제가 잘못되었음을 지적 할 수 있습니까? 또한 디버그하기가 더 힘든 IE11에서 dev 도구를 열 수 없지만 위의 코드에서 잘못된 점을 알릴 수 있습니다.
편집 아래의 코드가 잘 경우 transformNode()
가 Object doesn't support property or method 'transformNode'
또는 정의되지 XSLTProcessor()
을 반환하지만 beforeSend
와 아약스 전화가 누군가가 확인할 수는
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);
}
}
});
}
콘솔에서 문제를 지적하는 오류를 확인 했습니까? –
dev 도구를 열 수 없습니까? 페이지를 열기 전에 열기? 어떤 이유로 든 – epascarello
이 IE에서 콘솔을 열 수 없으면 충돌이 계속됩니다. :/그러나 W3C에서 예제를 시도하면 완벽하게 작동합니다. – MrNew