将内联 XML 和内联 XSL 转换为 XHTML
Transforming inline XML and inline XSL to XHTML
加载 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>
如果你想在 IE 中使用 XSLT,那么你不能使用 DOMParser
来解析 XML,你需要使用 MSXML DOM 文档new ActiveXObject('Msxml2.DOMDocument.6.0')
和 loadXML
方法,我不认为尝试将 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>
加载 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>
如果你想在 IE 中使用 XSLT,那么你不能使用 DOMParser
来解析 XML,你需要使用 MSXML DOM 文档new ActiveXObject('Msxml2.DOMDocument.6.0')
和 loadXML
方法,我不认为尝试将 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>