From 24ab4f145c9121131b322fe400d5efdd1e62b7dc Mon Sep 17 00:00:00 2001 From: Hirohisa Yamaguchi Date: Thu, 8 Feb 2018 21:20:29 +0900 Subject: [PATCH 1/5] XSL need to be DOMDocument not XMLDocument when processing with MSXML --- m-xml.js | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/m-xml.js b/m-xml.js index fb45054..d4ba69e 100644 --- a/m-xml.js +++ b/m-xml.js @@ -55,13 +55,18 @@ THE SOFTWARE. } function loadXML(source) { - var xhr = (window.ActiveXObject || "ActiveXObject" in window) ? + if (isXML(source)) { + return parseXMLString(source); + } + else { + var xhr = (window.ActiveXObject || "ActiveXObject" in window) ? new ActiveXObject("Msxml2.XMLHTTP.3.0") : new XMLHttpRequest(); - xhr.open("GET", source, false); - xhr.send(); - return xhr.responseXML; + xhr.open("GET", source, false); + xhr.send(); + return xhr.responseXML; + } } function parseXMLString(xmlString) { @@ -101,7 +106,12 @@ THE SOFTWARE. if (window.ActiveXObject || "ActiveXObject" in window) { var xsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument.6.0"); xsl.async = false; - xsl.load(source); + if (isXML(source)) { + xsl.loadXML(source); + } + else { + xsl.load(source); + } return xsl; } @@ -187,10 +197,8 @@ THE SOFTWARE. /// compatability issues automatically. /// transform: function (xmlSource, xslSource, parameters) { - var xml = (isXML(xmlSource)) ? parseXMLString(xmlSource) - : loadXML(xmlSource), - xsl = (isXML(xslSource)) ? parseXMLString(xslSource) - : loadXSL(xslSource); + var xml = loadXML(xmlSource), + xsl = loadXSL(xslSource); if (window.ActiveXObject || "ActiveXObject" in window) { return getActiveXTransform(xml, xsl, parameters); From 085cb6eecbb260657ae17dfdaaa1df155c97740e Mon Sep 17 00:00:00 2001 From: Hirohisa Yamaguchi Date: Thu, 8 Feb 2018 22:29:14 +0900 Subject: [PATCH 2/5] assigning to innerHTML is not equivalent to parentNode.replaceChild() --- m-xml.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/m-xml.js b/m-xml.js index d4ba69e..d263cd7 100644 --- a/m-xml.js +++ b/m-xml.js @@ -223,7 +223,10 @@ THE SOFTWARE. } if (window.ActiveXObject || "ActiveXObject" in window) { - target.innerHTML = transformed; + var node = document.createElement('div'); + node.innerHTML = transformed; + target.parentNode.insertBefore(node.firstChild, target); + target.parentNode.removeChild(target); } else { target.parentNode.replaceChild(transformed, target); From 96665857b445a1029f7fb9cbe606765cbd9c5dd3 Mon Sep 17 00:00:00 2001 From: Hirohisa Yamaguchi Date: Thu, 8 Feb 2018 22:34:16 +0900 Subject: [PATCH 3/5] IE versions which support querySelector() do not require MSXML --- m-xml.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/m-xml.js b/m-xml.js index d263cd7..1eb4122 100644 --- a/m-xml.js +++ b/m-xml.js @@ -59,9 +59,7 @@ THE SOFTWARE. return parseXMLString(source); } else { - var xhr = (window.ActiveXObject || "ActiveXObject" in window) ? - new ActiveXObject("Msxml2.XMLHTTP.3.0") : - new XMLHttpRequest(); + var xhr = new XMLHttpRequest(); xhr.open("GET", source, false); xhr.send(); From ba6159ec43416015d63f8f08b71e760209bd84ea Mon Sep 17 00:00:00 2001 From: Hirohisa Yamaguchi Date: Thu, 8 Feb 2018 23:02:47 +0900 Subject: [PATCH 4/5] try parse responseText when responseXML is null Microsoft Edge returns null when Content-Type does not suit see also: https://github.com/t-davies/magicxml/pull/5 --- m-xml.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/m-xml.js b/m-xml.js index 1eb4122..5ff8cdd 100644 --- a/m-xml.js +++ b/m-xml.js @@ -63,7 +63,7 @@ THE SOFTWARE. xhr.open("GET", source, false); xhr.send(); - return xhr.responseXML; + return xhr.responseXML || parseXMLString(xhr.responseText); } } From 93930248835e204aaec31ff270f45632364de1c9 Mon Sep 17 00:00:00 2001 From: Hirohisa Yamaguchi Date: Thu, 1 Mar 2018 00:40:54 +0900 Subject: [PATCH 5/5] support document fragments returned by transform() consist of several nodes --- m-xml.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/m-xml.js b/m-xml.js index 5ff8cdd..9911849 100644 --- a/m-xml.js +++ b/m-xml.js @@ -223,7 +223,9 @@ THE SOFTWARE. if (window.ActiveXObject || "ActiveXObject" in window) { var node = document.createElement('div'); node.innerHTML = transformed; - target.parentNode.insertBefore(node.firstChild, target); + Array.prototype.slice.call(node.childNodes, 0).forEach(function (nd) { + target.parentNode.insertBefore(nd, target); + }); target.parentNode.removeChild(target); } else {