在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="<xsl:number count="//headline"/> = 4">
提前感谢任何见解, 乔治
答案 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:number
和preceding::headline
在循环中执行时可能都很昂贵,如果这是一个问题,那么你应该在你选择的XSLT处理器下比较它们:一个可能是优化得比另一个好。
想想看,你对xsl:number
的使用对我来说很奇怪。 count属性是一种模式,模式//headline
与模式headline
完全匹配相同的节点。因此,我误读了对xsl:number的调用,因为它计算了文档中的所有标题,而实际上只计算了前面的兄弟标题。我想知道这是不是你想要的?