在到达某些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 < 1)">
<h2>Magasiner</h2>
i++
</xsl:if>
<xsl:if test="homepageArticleDate != '' and (j < 1)">
<h2>Artikel</h2>
j++
</xsl:if>
</xsl:for-each>
我已尝试使用position()
,但这不起作用,因为这两个属性都在$matchedNodes
$ matchedNodes由umbraco节点组成。
有人能看到这个问题的解决方案吗?我曾经考虑过使用xsl:template
,但我在XSLT上有点新手,所以我不知道从哪里开始。
答案 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>