如何在 xslt 1.0 中的子字符串中添加十进制数



我有以下输入xml。

<?xml version = "1.0" encoding = "UTF-8"?>
<values>
<value>sometext;+123.23;+100.23</value>
<value>sometext;+004.23;+444.12</value>
</values>

我是 XSL 1.0 的新手。我想添加字符串中收到的两个十进制数字,但我收到 NaN 错误。我该怎么做。 我想从上面的输入 xml 中获取以下输出,其中十进制值相加,但我收到 NaN 错误。

<?xml version="1.0"?>
<Results>
<Result>+223.46</Result>
<Result>+448.35</Result>
</Results>

我有如下 XSL 文件,

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match = "/"> 
<Results>
<xsl:for-each select="values/value">
<Result>
<xsl:value-of select="number(substring(.,10,7)) + 
number(substring(.,18,7))" />
</Result>
</xsl:for-each>
</Results>
</xsl:template>

不允许数字包含+符号。

请尝试:

<xsl:value-of select="substring(., 11, 6) + substring(., 19, 6)" />

(当然,假设位置和长度是恒定的 - 并且数字总是正数(。


我自己的偏好是做:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/values"> 
<Results>
<xsl:for-each select="value">
<xsl:variable name="a" select="substring-before(substring-after(., ';'), ';')" />
<xsl:variable name="b" select="substring-after(substring-after(., ';'), ';')" />
<Result>
<xsl:value-of select="translate($a, '+', '') + translate($b, '+', '')" />
</Result>
</xsl:for-each>
</Results>
</xsl:template>
</xsl:stylesheet>

这将适用于正数和负数,并且不依赖于给定字符串中三个标记中的任何一个的长度。

相关内容

  • 没有找到相关文章

最新更新