所以我正在编写一个XSLT转换来将XML文件解析为HTML。有一段时间,一切都进展顺利。但是,我遇到了一个问题。基本上,似乎没有遵循我期望的顺序。
在转换中有一些看起来像这样的代码。
<xsl:template match="/"
<html>
<head></head>
<body>
<h1>Summary</h1>
<table>
<xsl:apply-templates select="theItem"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="theItem"/>
<tr><td>Column1</td><td>Column2</td></tr>
</xsl:template>
我期望这样做是建立一个表格,并为模板的每个匹配填一行。
它的作用是打开并关闭表格,然后将所有行放在后面。这样的事情。
<table></table>
<tr>
<td>
Column1
</td>
<td>
Column2
</td>
</tr>
<tr>
<td>
Column1
</td>
<td>
Column2
</td>
</tr>
那到底发生了什么?我不确定它是否重要,但我使用msxsl进行转换。我也尝试在数据中嵌入转换并在IE中打开它。创建相同的问题。我看不出任何方式这是预期的行为,但也许有些东西我不知道。
修改
请注意,我可以将模板应用程序包装在任意类型的任意数量的标签中,并且在显示任何模板信息之前打开和关闭它们。
答案 0 :(得分:1)
虽然在大多数情况下,这个问题已经过时,但如果有人发现类似的错误,我想澄清这个问题。
发生了什么事
<xsl:apply-templates select="theItem"/>
在示例代码中调用时没有匹配任何内容。所以它没有产生任何东西(如你所料)。但是,稍后在代码中确实与
匹配<xsl:template match="theItem"/>
<tr><td>Column1</td><td>Column2</td></tr>
<xsl:template>
并插入所有行,就像它应该的那样。这产生了不希望的效果。
如果有人见过这种行为,那就是我要看的第一个地方。确保您的模板实际上是在您预期的时候调用的,而不是其他时间。这可能会导致模板的无序应用。感谢所有帮助我找到解决方案的人。