我想根据条件使Counter值递增。但我无法增加值或将1添加到全局变量。我使用以下代码
<xsl:variable name="count">0</xsl:variable>
<xsl:variable name="incre">1</xsl:variable>
<xsl:template match="/">
<xsl:if test="$video1 != ''">
<xsl:variable name="count" select="number($count)+number($incrementor)"/>
<!-- display video1 -->
</xsl:if>
<xsl:if test="$video2 != ''">
<xsl:variable name="count" select="number($count)+number($incrementor)"/>
<!-- display video2 -->
</xsl:if>
<xsl:if test="$video3 != ''">
<xsl:if test="$count<2">
<xsl:variable name="count" select="number($count)+number($incrementor)"/>
<!-- display video3 -->
</xs:if>
</xsl:if>
<xsl:if test="$video4 != ''">
<xsl:if test="$count<2">
<xsl:variable name="count" select="number($count)+number($incrementor)"/>
<!-- display video4 -->
</xs:if>
</xsl:if>
</template>
如何递增count的值或向其添加1。提前谢谢。
答案 0 :(得分:2)
你的问题来自于在尝试使用函数式语言时像程序员一样思考。这是一个糟糕的组合;当你使用它们而不是反对它们时,工具可以更好地工作。
不要试图遍历文档并增加变量以保持事物的数量。用声明性术语描述你想要的东西。
在这里,您希望显示文档中的前两个非空<video>
元素,并且您希望其他元素(所有空<video>
元素和第三个以及后来的非空{{1}元素1}}元素)在沉默中传递。 (当然,我正在解决这个问题:既然你没有展示你的XML,我实际上并不知道你真正想要的是什么,用XML术语。)
所以你想要一个模板来抑制空的<video>
元素:
<video>
并且您希望模板通过两个或多个非空<xsl:template match="video[not(node())]"/>
元素来压缩文档中前面的任何<video>
元素:
<video>
并且您希望模板显示前两个非空<xsl:template
match="video[count(preceding::video
[* or normalized-space(.)]
)
> 1]"/>
元素:
<video>