我正在创建一个从当前成员中获取属性的宏。该属性使用“多文本字符串”数据类型,每个文本字符串包含由逗号分隔的三个值,媒体ID,版本号以及添加的日期和时间。
e.g。 1475,1,28-Dec-12 01:26:45(媒体ID,版本号,添加的日期和时间)
第一个值是介质ID,在该mediatype上我有一个“protectedFile”true / false属性。我想计算我的多个文本字符串列表中有多少项将该值设置为“true”
我尝试了以下内容:
<xsl:variable name="protectedFile">
<xsl:for-each select="umbraco.library:GetCurrentMember()/assetDownloads/values/value">
<xsl:variable name="contentSplit" select="umbraco.library:Split(current(), ',')" />
<xsl:for-each select="$contentSplit/value">
<xsl:if test="position() = 1">
<xsl:if test="umbraco.library:GetMedia(., 0)/protectedFile != '0'">
<xsl:value-of select="umbraco.library:GetMedia(., 0)/protectedFile" />
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:variable>
<h3>Protected file: <xsl:value-of select="$protectedFile"/></h3>
但由于它是“for-each”,结果显示为: 受保护的文件:111
我需要它显示为计数受保护的文件:3
有人可以帮助我吗?
干杯, JV
答案 0 :(得分:0)
为了在XSLT中添加/减少/ etc,您需要使用递归。这是使用xsl:call-template完成的,并且具有类似函数的辅助xsl:template。这样的事情就是一个简单的例子:
<xsl:variable name="incrementVal" select="1"/>
<xsl:template match="/">
<xsl:call-template name="addLoop">
<xsl:with-param name="inc" select="$incrementVal" />
<xsl:with-param name="count" select="5" />
</xsl:call-template>
</xsl:template>
<xsl:template name="addLoop">
<xsl:param name="inc" />
<xsl:param name="count" />
<xsl:choose>
<xsl:when test="$count = 0">
<xsl:value-of select="$inc"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="addLoop">
<xsl:with-param name="inc" select="$inc + 1" />
<xsl:with-param name="count" select="$count - 1" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
将其放入测试XSLT并使用XSLT测试工具查看结果。