[英]How to create HTML from XML using XSLT and javascript?
我正在关注本教程: http : //www.w3schools.com/xsl/xsl_client.asp
我有一个 HTML 页面。 我想使用 XML 文件中的数据创建 HTML,并使用 XSLT 对其进行样式设置,方法是使用 JavaScript 从服务器读取 XML 和 XSLT 文件。
HTML页面:
<html>
<head>
<script type="text/javascript" src="/scripts/onload.js"></script>
</head>
<body onload="displayResult()">
<div id="example" />
</body>
</html>
Javascript:
function loadXMLDoc(filename)
{
if (window.ActiveXObject)
{
xhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
else
{
xhttp = new XMLHttpRequest();
}
xhttp.open("GET", filename, false);
try {xhttp.responseType = "msxml-document"} catch(err) {} // Helping IE11
xhttp.send("");
return xhttp.responseXML;
}
function displayResult()
{
var location = document.URL;
var xmlLocation = location +"myXMl.xml";
xml = loadXMLDoc(xmlLocation);
xsl = loadXMLDoc("style.xsl");
// code for IE
if (window.ActiveXObject || xhttp.responseType == "msxml-document")
{
ex = xml.transformNode(xsl);
document.getElementById("example").innerHTML = ex;
}
// code for Chrome, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
resultDocument = xsltProcessor.transformToFragment(xml, document);
document.getElementById("example").appendChild(resultDocument);
}
}
XSLT 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="movie">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
xml 文件没什么特别的——因为它只包含 CD 的信息等。
我很困惑,因为看起来我正在将 XSLT 的输出“插入”到已经在html
body
中的“示例” div
中。 但是 XSLT 已经定义了一个html
、 head
和body
节点。 那么我不是在技术上将<html>
节点放在<div id="example" />
,这不应该导致不正确的 html 吗? (嵌套的html
标签)? 当我在 safari 中查看控制台时,DOM 看起来很正常(只有一组html
、 head
、 body
等。这是怎么回事?我误解了 XSLT 的工作原理吗?
您没有误解 XSLT 的工作原理。 代码将html
和body
节点放在div
元素中。 只是浏览器此时可能选择忽略它们,而不是将它们添加到 DOM 中。
所以W3Schools 的例子可能是非常具有误导性的。 XSLT 不应该真正包含html
和body
标签。 如果您在<?xml-stylesheet
中使用<?xml-stylesheet
处理指令,在浏览器中将 XML 显示为 HTML,您才真正需要它们(如http://www.w3schools.com/xsl/xsl_transformation.asp所示,例如)
您可以将 XSLT 中给出的 html 标签当作一些虚拟标签,如果您不想使用它们,可以删除它们。
只需将 XSLT 修改为以下。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="movie">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
你仍然得到你的主要html
、 head
和body tags
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.