在每个内部增加变量

时间:2015-09-25 11:13:37

标签: xslt umbraco increment

在到达某些if语句时,我需要制作某种标识符/标志。所以我只在for-each中编写<h2>一次(代码在下面):

<xsl:for-each select="$matchedNodes">
    <xsl:variable name="i" select="0"/>
    <xsl:variable name="j" select="0"/>
    <xsl:if test="magazineDate != '' and (i &lt; 1)">
        <h2>Magasiner</h2>
        i++
    </xsl:if>

    <xsl:if test="homepageArticleDate != '' and (j &lt; 1)">
        <h2>Artikel</h2>
        j++
    </xsl:if>
</xsl:for-each>

我已尝试使用position(),但这不起作用,因为这两个属性都在$matchedNodes

之内

$ matchedNodes由umbraco节点组成。

有人能看到这个问题的解决方案吗?我曾经考虑过使用xsl:template,但我在XSLT上有点新手,所以我不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

XSLT和XPath是函数式语言。除其他外,这意味着一旦定义了值,变量就无法更改。当然,还有其他解决方案,不需要改变任何变量 - 在许多方面,不变性是一种优越的语言特性,导致更易理解和可维护的代码,并且允许比OIL更具侵略性的优化(Old Imperative)语言)。

一个解决方案可能如下所示

    <xsl:apply-templates select=
    "$matchedNodes/magazineDate[normalize-space()][1]
  |  $matchedNodes/homepageArticleDate[normalize-space()][1]" mode="heading"/>

然后在两个不同的/单独的模板中(甚至可以尝试将它们统一到一个模板中):

<xsl:template match="magazineDate" mode="heading">
  <h2>Magasiner</h2>
</xsl:template>

<xsl:template match="homepageArticleDate" mode="heading">
  <h2>Artikel</h2>
</xsl:template>