如何在xsl:if测试"condition"中使用xsl:数字计数作为条件?



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

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

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

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

这是我的不工作:

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

提前感谢任何见解,乔治

@michael。hor257k解释说,一般的方法是将xsl:number调用放在xsl:变量中(或者在XSLT 2.0中,放在xsl:函数中)。有时放弃xsl:number:

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

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

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

If (!)我的理解是正确的,你想做这样的事情:

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

相关内容

  • 没有找到相关文章

最新更新