如何使用XSLT和javascript从XML创建HTML
How to create HTML from XML using XSLT and javascript?
我正在学习本教程:http://www.w3schools.com/xsl/xsl_client.asp
我有一个HTML页面。我想使用XML文件中的数据创建HTML,并通过使用JavaScript从服务器读取XML和XSLT文件,使用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
节点。那么,从技术上讲,我不是在<div id="example" />
中放置了一个<html>
节点吗?这不应该导致错误的html吗?(嵌套的html
标签)?当我在safari中查看控制台时,DOM看起来很正常(只有一组html
、head
、body
等。那么发生了什么?我是否误解了XSLT的工作原理?
您没有误解XSLT的工作原理。代码将html
和body
节点放在div
元素中。只是浏览器当时可能选择忽略它们,而不将它们添加到DOM中。
因此,W3Schools的例子可能非常具有误导性。XSLT不应该真正包含html
和body
标记。只有当您在XML中使用<?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
。
- 在javascript中的xml中创建一个链接
- 使用javascript中的php变量创建XML
- 使用 Javascript 创建 XML 文件
- 从XML字符串创建DOM元素,如何使用.getElementsByName()
- 我可以使用jQuery或使用服务器端创建xml吗
- 从js文件而不是xml文件创建关联数组
- 从外部xml文件创建标记
- 为什么使用自定义标记创建元素会在 IE9 或 10 的 outerHTML 中添加 xml 命名空间,直到调用 .fin
- 在 javascript 中创建 xml 文档显示错误
- 如何在IE上创建xml元素并添加nodeValue
- 在 JS 中创建、编辑和保存 XML
- 我如何创建一个读取 xml 或 json 的 Chrome 扩展程序
- 从xml创建多边形坐标数组
- 如何使用XSLT和javascript从XML创建HTML
- XML -创建订单表单
- 如何将Javascript(jQuery)添加到从XSLT/XML创建的页面
- 使用XML创建dojo.store.memory
- mxGraph:用XML创建图形
- 如何使用xml创建本体
- 使用XML创建配置文件并在HTML5中读取XML