xml - 需要为 XSL 模板的变量添加逗号
问题描述
我正在尝试在从我们的客户信息系统打印的账单中添加一个逗号。据我了解,该应用程序从 sql server 中提取客户的数据并创建一个 xml 文件。然后将该 xml 文件与 xsl 文件进行比较以进行格式化,并创建一个新的 xml 文件和 pdf。
我对 xml 了解不多,但据我所知,@previousread、@current 和 @usage 是从我们应用程序的 xml 流中解释的变量。这三个变量分别代表上一次抄表、当前抄表和消耗(使用)。
我的组织希望我为数千人添加逗号。在这篇文章中,我们的账单只是将一堆数字放在一起。我看不出数字的外观有问题,也看不出我们为什么需要逗号,但我希望它有逗号。
我不是网络开发人员,但我对 sql server 有一点经验。我花了大约 8 个小时来解决这个问题,并认为我发现它只是为了看到 pdf 没有逗号。
我已经在网上看到了如何格式化一个数字的例子,当它是一个常数值但每个仪表读数的值不同时,我不知道如何弥补这一点。
我已经按原样发布了代码,并且我已经对其进行了编辑。
这是原始代码。
<fo:table-cell text-align="left" padding-left="10pt">
<fo:block border-right-style="solid" border-color="black" border-width="0.2pt">
<xsl:value-of select="@utility"/>
</fo:block>
</fo:table-cell>
<xsl:if test="count(meter/meterread) > 0">
<fo:table-cell text-align="center" border-right-style="solid" border-color="black" border-width="0.2pt">
<fo:block>
<xsl:value-of select="descendant::meter/meterread[1]/@previousread"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" border-right-style="solid" border- color="black" border-width="0.2pt">
<fo:block>
<xsl:value-of select="descendant::meter/meterread[last()]/@current"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" border-right-style="solid" border- color="black" border-width="0.2pt">
<fo:block>
<xsl:choose>
<xsl:when test="string-length(meter/meterread/@billingusage) > 0">
<xsl:value-of select="sum(meter/meterread/@billingusage)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="sum(meter/meterread/@usage)"/>
</xsl:otherwise>
</xsl:choose>
</fo:block>
</fo:table-cell>
这是我编辑过的代码。
<fo:table-cell text-align="left" padding-left="10pt">
<fo:block border-right-style="solid" border-color="black" border-width="0.2pt">
<xsl:value-of select="@utility"/>
</fo:block>
</fo:table-cell>
<xsl:if test="count(meter/meterread) > 0">
<fo:table-cell text-align="center" border-right-style="solid" border-color="black" border-width="0.2pt">
<fo:block>
<xsl:value-of select="descendant::meter/meterread[1]/@previousread"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" border-right-style="solid" border-color="black" border-width="0.2pt">
<fo:block>
<xsl:value-of select="descendant::meter/meterread[last()]/@current"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="center" border-right-style="solid" border-color="black" border-width="0.2pt">
<fo:block>
<xsl:choose>
<xsl:when test="string-length(meter/meterread/@billingusage) > 0">
<xsl:value-of select="sum(meter/meterread/@billingusage)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="sum(meter/meterread/@usage)"/>
</xsl:otherwise>
</xsl:choose>
</fo:block>
</fo:table-cell>
解决方案
您可以使用该函数将带有逗号的数字格式化为千位分隔符format-number()
:只需在任何参考资料中查找即可。我不知道你想在哪里使用它,也许是在调用sum()
.
顺便说一句,您的样式表中有一些奇怪的代码。
<xsl:when test="string-length(meter/meterread/@billingusage) > 0">
<xsl:value-of select="sum(meter/meterread/@billingusage)"/>
</xsl:when>
如果meter/meterread/@billingusage
是一个包含多个值的集合,那么应用它是没有意义的string-length()
;如果它是一个单一的值,那么应用它是没有意义的sum()
。
表达式@previousread
、@current
和@usage
不引用变量,它们引用源文档中的属性。
8 小时足以阅读大量内容,所以我很惊讶您没有找到该format-number()
功能。
推荐阅读
- azure-active-directory - Azure Active Directory 是否适合 Internet 应用程序
- arrays - 如何在 TypeScript 中对对象数组进行排序
- python - 如何调整管道内随机森林分类器中的参数?
- python - 为什么删除字符串和更新数据集的代码不起作用?
- python - Python Tkinter GUI 执行 python 脚本错误
- javascript - 重定向未经身份验证的用户nuxt js
- javascript - Puppeteer 经常在 Twitter 上因超时错误导致 waitForNavigation 失败
- python - 如何使用 dask 旋转一个非常大的数据框?
- css - CSS:选择深度嵌套元素的最佳实践
- python - 无法访问 Jupyter 笔记本