2

XSL を使用しているこの DataView があります。1 つの列はリンクです。クエリ文字列キー {@Title} として使用しているフィールドは、リンク用に変更する必要があります。

  • 現在は 9 桁ですが、最初の桁を削除する必要があります。
  • 残りの 8 つの数字を 8 倍する必要があります。

したがって、N00000010 は 00000080 に変わります

以下のコードはちょうど出力しています

https://myserver.edu/zzz/r.aspx?key=N00000010

しかし、あるべきです

https://myserver.edu/zzz/r.aspx?key=00000080

更新: オーバーフローした場合、出力は必要に応じて 8 桁を超えることができます。

https://myserver.edu/zzz/r.aspx?key=80

    <td class="ms-vb">
            <xsl:value-of select="@Supervisor" /></td><td class="ms-vb">
            <xsl:value-of select="format-number(@StartingSickBalance, '#,##0.00;-#,##0.00')" /></td><td class="ms-vb">
            <xsl:value-of select="format-number(@FiscalStartingBalance, '#,##0.00;-#,##0.00')" /></td><td class="ms-vb">
            <a href="https://myserver.edu/zzz/r.aspx?key={@Title}">See Balances</a>
            </td><td class="ms-vb">
4

2 に答える 2

3

アップデート:

先頭に 0 を付けて出力を制限する必要がない場合は、次のようにする必要があります。

  <xsl:variable name="linkId" select="number(substring({@Title}, 2,8)) * 8" />
  <a href="https://myserver.edu/zzz/r.aspx?key={$linkId}">Test</a>

または、@DevNullが言及しているように、変数なしで:

<a href="https://myserver.edu/zzz/r.aspx?key={number(substring(@Title, 2,8)) * 8}">Test</a>

これにより、次の出力が生成されます。

<a href="https://myserver.edu/zzz/r.aspx?key=80">Test</a>

以前の回答

これを行う 1 つの方法は、元の文字列をサブストリング化して先頭の文字を削除することです。

substring({@Title}, 2, 8)

これにより、次のことがわかります。00000010

次に、先頭の 0 を維持するために先頭に 1 を配置します。

concat(1, substring({@Title}, 2, 8))

与える:100000010

次に、数値に変換して、これを 8 倍します。

number(concat(1, substring({@Title}, 2, 8))) * 8

与える800000080

次に、再び部分文字列を作成します。

substring(number(concat(1, substring({@Title}, 2, 8))) * 8, 2, 8)

与える:00000080

すべてを一緒に入れて:

<xsl:value-of select="substring(number(concat(1, substring({@Title}, 2, 8))) * 8, 2, 8)" />

出力で使用するには:

  <xsl:variable name="linkId" select="substring(number(concat(1, substring({@Title}, 2, 8))) * 8, 2, 8)" />
  <a href="https://myserver.edu/zzz/r.aspx?key={$linkId}">Test</a>

少し長めに見えますが、機能します。format-numberxsl パーサー (C#、.Net 4.0) で先行ゼロを維持できませんでした。

あなたformat-numberのために働くなら、以下はよりエレガントです:

  <xsl:variable name="linkId" select="format-number(number(concat(1, substring({@Title}, 2, 8))) * 8, '00000000')" />
  <a href="https://myserver.edu/zzz/r.aspx?key={$linkId}">Test</a>

ただし、@MvG が指摘しているように、8 を掛けると元の 8 桁をオーバーフローすると、8 桁が 9 になる可能性があります。

于 2012-11-08T22:57:06.773 に答える
3

ダッシュと非常によく似たソリューションにたどり着きましたが、concat() の代わりにフォーマット指定子 '0' を指定して format-number() を使用しただけです。

<xsl:value-of select="format-number(number(substring({@Title}, 2,8))*8, '00000000')" />

VS2010でうまくいきました。

于 2012-11-08T23:04:39.003 に答える