0

現在のメンバーからプロパティを取得するマクロを作成しています。プロパティは「複数のテキスト文字列」データ型を使用し、各テキスト文字列には、メディアID、バージョン番号、および追加された日付と時刻をコンマで区切った3つの値が含まれます。

例:1475,1,28-Dec-12 01:26:45(メディアID、バージョン番号、日付と時刻が追加されました)

最初の値はメディアIDであり、そのメディアタイプには「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

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 に答える