在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="<xsl:number count="//headline"/> = 4">
提前感谢任何见解,乔治
@michael。hor257k解释说,一般的方法是将xsl:number调用放在xsl:变量中(或者在XSLT 2.0中,放在xsl:函数中)。有时放弃xsl:number:
会更方便<xsl:if test="count(preceding::headline) = 3">...</xsl:if>
如果它是一个大文档,那么xsl:number
和preceding::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>