1

所以我正在编写一个 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 中打开它。创建相同的问题。我看不出这将是预期的行为,但也许我缺少一些东西。

编辑

请注意,我可以将模板应用程序包装在任意数量的任意类型的标签中,并且它们都会在显示任何模板信息之前打开和关闭。

4

1 回答 1

1

虽然在大多数情况下,这个问题已经过时,但如果有人发现类似的错误,我想澄清这个问题。

发生的事情是

<xsl:apply-templates select="theItem"/>

在示例代码中调用它时不匹配任何内容。所以它没有产生任何东西(如你所料)。但是,稍后在代码中确实匹配到

<xsl:template match="theItem"/>
    <tr><td>Column1</td><td>Column2</td></tr>
<xsl:template>

并插入所有行,就像它应该的那样。这产生了不希望的效果。

如果有人看到这种行为,那是我首先要看的地方。确保您的模板实际上是在您期望的时候被调用的,而不是其他时间。这可能会导致模板应用程序出现乱序。感谢所有帮助我解决此问题的人。

于 2014-06-30T15:28:37.787 回答