如何在xsl中使用xsl:number count作为条件:if test" condition"?

时间:2015-08-04 23:48:02

标签: xslt xslt-1.0

在xsl:for-each选择循环中,我有<xsl:number count="//headline"/>正确地给我节点#;现在我想在xsl:if测试块中使用该数字,但是我无法正确获得测试表达式,msxml4.dll不断发生错误。我正在使用xsl 1.0(暂时坚持使用)

因此,如果表达式为真,则在<xsl:if test="expression"> ...输出中。</xsl:if>

我希望测试表达式基本上是这样的(所以我可以为Node#4做一些特定的事情,在这个例子中):

  

<xsl:number count="//headline"/> = 4

这就是我所做的不起作用:

  

<xsl:if test="&lt;xsl:number count=&quot;//headline&quot;/&gt; = 4">

提前感谢任何见解, 乔治

2 个答案:

答案 0 :(得分:1)

如果(!)我理解正确,你想做类似的事情:

<xsl:variable name="n">
    <xsl:number count="headline"/>  
</xsl:variable>
<xsl:value-of select="$n"/>
<xsl:if test="$n = 4">
    <!-- do something -->
</xsl:if>

答案 1 :(得分:0)

正如@ michael.hor257k所解释的那样,一般的方法是将xsl:number调用放在xsl:variable中(或者放在xsl:函数内的XSLT 2.0中)。有时虽然放弃xsl:number:

更方便
<xsl:if test="count(preceding::headline) = 3">...</xsl:if>

如果它是一个大文档,那么xsl:numberpreceding::headline在循环中执行时可能都很昂贵,如果这是一个问题,那么你应该在你选择的XSLT处理器下比较它们:一个可能是优化得比另一个好。

想想看,你对xsl:number的使用对我来说很奇怪。 count属性是一种模式,模式//headline与模式headline完全匹配相同的节点。因此,我误读了对xsl:number的调用,因为它计算了文档中的所有标题,而实际上只计算了前面的兄弟标题。我想知道这是不是你想要的?

相关问题