0

我正在创建一个从当前成员获取属性的宏。该属性使用“多个文本字符串”数据类型,每个文本字符串包含三个值,由逗号分隔媒体 ID、版本号以及添加的日期和时间。

例如 1475,1,28-Dec-12 01:26:45(媒体 ID、版本号、添加日期和时间)

第一个值是媒体 ID,在该媒体类型上,我有一个“protectedFile”真/假属性。我想计算我的多个文本字符串列表中有多少项将该值设置为“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

有人可以帮助我吗?

干杯,合资企业

4

1 回答 1

0

为了在 XSLT 中进行加/减/等操作,您需要使用递归。这是使用 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 测试工具查看结果。

于 2013-01-09T21:25:32.350 回答