我打印了一行反向字体(黑色背景,白色文本),分散在我的收据磁带的宽度(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个空格的文本字段,如果这还不是很明显的话。
无论我输入的值($1,275,824.00和$2,000一样,xml打印都是正确的)。
我的问题是,这是有史以来最疯狂的传说。有没有更干净的方法来做到这一点?
谢谢!
发布于 2019-02-02 00:03:23
如果您使用的是libxslt或Xalan或其他支持EXSLT str:align()和str:padding()扩展函数的处理器,那么您可以简单地这样做:
<text>
<xsl:value-of select="str:align(SavingsSegment, str:padding(41, ' '), 'center')"/>
</text> 要在纯XSLT1.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> https://stackoverflow.com/questions/54487461
复制相似问题