假设我有带有'book'节点的xml
<book>
etc
</book>
在我的xsl文件中,我有:
<xsl:template match = "book">
bla bla
</xsl:template>
当然,这就像一个魅力。
现在我想使用一个模板,如果我只有一个<book>
节点,另一个模板,如果我有10个<book>
节点。
这(下面)不起作用(我想因为我在'choose'语句中定义模板)我猜对了吗?我怎么能用这个条件(节点数)
来使用不同的模板(如果不是这样)<xsl:choose>
<xsl:when test="count(book) = 1">
template1 defined here
</xsl:when>
<xsl:otherwise>
template2 defined here
</xsl:otherwise>
</xsl:choose>
答案 0 :(得分:2)
模板必须是根xsl:stylesheet
或xsl:transform
的直接子项。但是当然你可以在比赛模式中写条件,例如
<xsl:template match="books[count(book) = 10]/book">...</xsl:template>
<xsl:template match="books[count(book) = 1]/book">...</xsl:template>
答案 1 :(得分:1)
您应该为这两种情况定义单独的模板,例如
<xsl:template match="*[count(book) = 1]/book">
<!-- this is called when there is only one book -->
</xsl:template>
<xsl:template match="book">
<!-- this is called in all other cases -->
</xsl:template>
在一本书案例中,两个模板&#39;匹配模式可以应用于同一节点,但在这种情况下,&#34;更具体的&#34;模板将获胜(有specific rules来控制优先顺序,但基本上只是一个元素名称的匹配将始终被包含/
或方括号中的谓词的匹配所推翻。 / p>