在浏览器中使用XSLT不起作用,收到错误:结束标记' xsl:template'与开始标记不匹配' xsl:for-each'

时间:2015-10-01 18:42:25

标签: xml xslt

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的初学者,所以.... 发送帮助。

1 个答案:

答案 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>一样)。

您已打开但尚未关闭的标签数量更多:scriptbodyhtml。这是一种纠正这些问题的可能方法(通过缩进代码,可以更容易地找到这些问题):

<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在运行之前是有效的。