我正在以反向字体(黑色背景,白色文本)打印一行,分布在收据带的宽度上(41 个字符)。我有功能代码,但我想知道是否有更好的方法来做到这一点:
这是我现有的代码:
<text lang="en" align="center" smooth="true" reverse="1"><xsl:value-of select="substring($spaces21, 1, (string-length($spaces21) - ((string-length(SavingsSegment) div 2) + string-length(SavingsSegment) mod 2)))"/>
<xsl:value-of select="SavingsSegment"/><xsl:value-of select="substring($spaces21, 1, (string-length($spaces21) - ((string-length(SavingsSegment) div 2) + string-length(SavingsSegment) mod 2)))"/>
</text>
此代码生成此 XML:
<text lang="en" align="center" smooth="true" reverse="1" xmlns=""> YOU SAVED $2.00 </text>
澄清:spaces21 是一个包含 21 个空格的文本字段(如果这还不是很明显的话)。
无论我输入什么值,xml 都会正确打印($1,275,824.00 和 $2.00 一样有效)。
我的问题是,这是有史以来最笨拙的拼凑。有没有办法以更干净的方式做到这一点?
Thanks!
如果您正在使用libxslt
or Xalan
或其他支持 EXSLT 的处理器字符串:对齐() http://exslt.org/str/functions/align/index.html and 字符串:填充() http://exslt.org/str/functions/padding/index.html扩展功能,那么你可以简单地做:
<text>
<xsl:value-of select="str:align(SavingsSegment, str:padding(41, ' '), 'center')"/>
</text>
要在纯 XSLT 1.0 中做到这一点,我相信这会更优雅:
<xsl:variable name="spaces21" select="' '"/>
<xsl:variable name="pad" select="(41 - string-length(SavingsSegment)) div 2"/>
<text>
<xsl:value-of select="substring($spaces21, 1, floor($pad))"/>
<xsl:value-of select="SavingsSegment"/>
<xsl:value-of select="substring($spaces21, 1, ceiling($pad))"/>
</text>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)