Xslt 基于节点数在XSL中使用不同的模板

Xslt 基于节点数在XSL中使用不同的模板,xslt,Xslt,假设我有带“book”节点的xml <book> etc </book> 等 在我的xsl文件中,我有: <xsl:template match = "book"> bla bla </xsl:template> 布拉布拉 当然,这很有魅力。 现在,如果我只有一个节点,我想使用一个模板,如果我有10个节点,我想使用另一个模板 这个(下面)不起作用(我想是因为我在“choose”语句中定义了模板),我猜对了吗?在这种情况下(节点数),我如

假设我有带“book”节点的xml

<book>
etc
</book>
在我的xsl文件中,我有:

<xsl:template match = "book">
bla bla
</xsl:template>

布拉布拉
当然,这很有魅力。 现在,如果我只有一个
节点,我想使用一个模板,如果我有10个
节点,我想使用另一个模板

这个(下面)不起作用(我想是因为我在“choose”语句中定义了模板),我猜对了吗?在这种情况下(节点数),我如何使用不同的模板(如果不是这样的话)


这里定义了template1
此处定义了模板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>
。。。
...

例如,您应该为这两种情况定义单独的模板

<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>


在一本书的案例中,两个模板的匹配模式可以应用于同一个节点,但在这种情况下,“更具体”的模板将获胜(有优先顺序的控制,但基本上只是元素名称的匹配总是会被包含
/
或方括号中谓词的匹配所推翻).

就是这样。非常感谢。太糟糕了,我还没有为你的答案投赞成票。np,我为你投了赞成票,因为一个被接受的满意的答案。在他们看来,更多的ppl就可以了
<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>