首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT1.0 Kludge清理

XSLT1.0 Kludge清理
EN

Stack Overflow用户
提问于 2019-02-01 21:36:53
回答 1查看 55关注 0票数 0

我打印了一行反向字体(黑色背景,白色文本),分散在我的收据磁带的宽度(41个字符)。我有函数代码,但我想知道是否有更好的方法来做到这一点:

以下是我现有的代码:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
 <text lang="en" align="center" smooth="true" reverse="1" xmlns="">             YOU SAVED $2.00             </text>

澄清: spaces21是一个包含21个空格的文本字段,如果这还不是很明显的话。

无论我输入的值($1,275,824.00和$2,000一样,xml打印都是正确的)。

我的问题是,这是有史以来最疯狂的传说。有没有更干净的方法来做到这一点?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-02 00:03:23

如果您使用的是libxsltXalan或其他支持EXSLT str:align()str:padding()扩展函数的处理器,那么您可以简单地这样做:

代码语言:javascript
复制
<text>
    <xsl:value-of select="str:align(SavingsSegment, str:padding(41, ' '), 'center')"/>
</text> 

要在纯XSLT1.0中这样做,我相信这将更加优雅:

代码语言:javascript
复制
<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> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54487461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档