xsl:
<?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>
<style>
body {
background-color: #000000;
}
p,h1,h2,h3,h4,h5,h6 {
color: #ffffff;
}
<body>
<h1>Documentation</h1>
<hr/>
<xsl:for-each select="commands/command">
<h2><xsl:value-of select="name"/></h2>
<hr/>
<p><xsl:value-of select="usage"/></p>
<p><xsl:value-of select="description"/></p>
<br/>
</xsl:template> <!-- error here -->
</xsl:stylesheet>
xml:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="documentationstyle.xsl"?>
<commands>
<command>
<name>compile</name>
<usage>compile game loveexedir outfilename outdir</usage>
<description>Compiles a love game</description>
</command>
<command>
<name>clear</name>
<usage>clear</usage>
<description>when i forget im using dos and not bash</description>
</command>
</commands>
在IE上,它说: 结束标记&#39; xsl:template&#39;与开始标记不匹配&#39; xsl:for-each&#39;。处理资源时出错&#39; DIRECTORY CENSORED ...
- ^
在谷歌浏览器上,它什么也没说。 我是XSL和XML的初学者,所以.... 发送帮助。
答案 0 :(得分:1)
在IE上,它说:结束标记'xsl:template'与开始标记'xsl:for-each'不匹配。处理资源'DIRECTORY CENSORED ...
时出错
错误是正确的,您忘了关闭<xsl:for-each>
。 XSLT是用XML开发的,XML必须是格式良好的XML。为了使其格式良好,每个元素必须是自闭的(与<br />
一样)或常闭(与<xsl:for-each>... some code... </xsl:for-each>
一样)。
您已打开但尚未关闭的标签数量更多:script
,body
和html
。这是一种纠正这些问题的可能方法(通过缩进代码,可以更容易地找到这些问题):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<style>
body {
background-color: #000000;
}
p,h1,h2,h3,h4,h5,h6 {
color: #ffffff;
}
</style>
<body>
<h1>Documentation</h1>
<hr/>
<xsl:for-each select="commands/command">
<h2><xsl:value-of select="name"/></h2>
<hr/>
<p><xsl:value-of select="usage"/></p>
<p><xsl:value-of select="description"/></p>
<br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
你can see it in action here,这通常是在使用浏览器之前测试XSLT样式表的好方法,因为基于浏览器的测试几乎是不可能的,他们的错误消息(如果有的话)通常很少使用。此外,大多数浏览器(Chrome,Firefox)不支持从本地驱动器运行XML + XSLT,并且显示错误或只显示空白页。
有大量的免费和商业工具可以帮助您在开发XSLT时提供上下文相关的帮助,这将确保您的XSLT在运行之前是有效的。