【问题标题】:Transforming inline XML and inline XSL to XHTML将内联 XML 和内联 XSL 转换为 XHTML
【发布时间】:2021-09-29 21:58:41
【问题描述】:

加载 XML 后,XSLT 无法在 IE11 中对其进行转换。
在转换时我得到Object doesn't support property or method transformNode

<!DOCTYPE html>
<html>
<head>
<title>XML Data Block Demo</title>
<script id="GUI" type="application/xml">
<GUI>
  <option>
    <name>My Inbox</name>
  </option>
  <option>
    <name>My Home</name>
  </option>
</GUI>
</script>

<script id="GUIxsl" type="application/xml">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">

  <h2>GUI</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th style="text-align:left">Option</th>
      </tr>
      <xsl:for-each select="GUI/option">
      <tr>
        <td><xsl:value-of select="name"/></td>
      </tr>
      </xsl:for-each>
    </table>
  </xsl:template>
</xsl:stylesheet>
</script>
<script>
function loadOnPage() {
    debugger;
    var xml = document.getElementById("GUI").textContent;
    var xsl = document.getElementById("GUIxsl").textContent;
    var parser = new DOMParser();
    var docxml = parser.parseFromString(xml, "application/xml");
    var docxsl = parser.parseFromString(xsl, "application/xml");
    ex = docxml.transformNode(docxsl);
    document.getElementById("example").innerHTML = ex;

}
</script>
</head>
<body onload="loadOnPage()";>
<div id="example" />

Demo did not run
</body>
</html>

【问题讨论】:

标签: javascript xml html xslt internet-explorer-11


【解决方案1】:

如果你想在 IE 中使用 XSLT 那么你不能使用 DOMParser 来解析 XML,你需要使用带有 new ActiveXObject('Msxml2.DOMDocument.6.0')loadXML 方法的 MSXML DOM 文档,我不认为尝试将 XML 或 XSLT 代码放入 HTML 是个好主意,但是示例 http://home.arcor.de/martin.honnen/html/test2015051901.html 在 IE 11 中对我有用:

function loadOnPage() {
  var xml = document.getElementById("GUI").textContent;
  var xsl = document.getElementById("GUIxsl").textContent;


  var docxml = new ActiveXObject('Msxml2.DOMDocument.6.0');
  docxml.loadXML(xml);

  var docxsl = new ActiveXObject('Msxml2.DOMDocument.6.0');
  docxsl.loadXML(xsl);

  var htmlFrag = docxml.transformNode(docxsl);
  document.getElementById("example").innerHTML = htmlFrag;

}

window.onload = loadOnPage;
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Test</title>
  <style>
  </style>
</head>

<body>
  <script id="GUI" type="application/xml">
    <GUI>
      <option>
        <name>My Inbox</name>
      </option>
      <option>
        <name>My Home</name>
      </option>
    </GUI>
  </script>

  <script id="GUIxsl" type="application/xml">
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="/">

        <h2>GUI</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th style="text-align:left">Option</th>
          </tr>
          <xsl:for-each select="GUI/option">
            <tr>
              <td>
                <xsl:value-of select="name" />
              </td>
            </tr>
          </xsl:for-each>
        </table>
      </xsl:template>
    </xsl:stylesheet>
  </script>


  <div id="example">

    Demo did not run
  </div>

</body>

</html>

【讨论】:

  • home.arcor.de/martin.honnen/html/test2015051901.html 有发布的代码,对我来说在 Windows 8.1 上使用 IE 11 可以正常工作。我不知道使用 IE 在浏览器中编写 XSLT 脚本的其他方法。我认为您评论中的其他链接与脚本编写new ActiveXObject('Msxml2.DOMDocument.6.0') 无关。
猜你喜欢
  • 2019-03-22
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多