我有这个使用XSL的DataView。一列是链接。我正在使用的字段作为查询字符串键{@Title}需要为链接进行更改。
所以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">
答案 0 :(得分: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>
早期答案
执行此操作的一种方法是将原始字符串子串以删除前导字母:
substring({@Title}, 2, 8)
这给了我们:00000010
然后我们在前面放置一个1以保持前导0:
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-number
在我的xsl解析器(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位。
答案 1 :(得分:3)
我找到了一个非常类似于dash的解决方案,只是我使用格式说明符'0'而不是concat()的format-number()。
<xsl:value-of select="format-number(number(substring({@Title}, 2,8))*8, '00000000')" />
在VS2010中它对我有用。