如何将字符串方程转换为数字?

时间:2016-11-28 11:22:44

标签: xml xslt xslt-1.0

我为每个以下字段生成一个: 214.2 428.4 + +端

我使用了substring-before(price,'+ end'),但这是一个字符串。

我有什么想法可以拿214.2 + 428.4并总结一下?

输入: XML:

<items>
  <item>
    <price>12.50</price>
    <quantity>2</quantity>
  </item>
  <item>
    <price>13.20</price>
    <quantity>3</quantity>
  </item>
</items>

的xsl:

<xsl:variable name="total"><xsl:for-each select="item"><xsl:value-of select="price*quantity"></xsl:value-of><xsl:text>+</xsl:text></xsl:for-each>end
</xsl:variable>

输出: 25,39.6

先谢谢你。

2 个答案:

答案 0 :(得分:0)

如果字符串包含有效的XPath表达式(就像在您的示例中那样),那么您需要能够动态评估XPath表达式。但这不是XSLT 1.0的标准功能:

  • 它可以在XSLT 3.0中使用xsl:evaluate指令
  • 它在许多XSLT处理器中作为供应商扩展(通常名为xx:eval()或xx:evaluate()
  • 提供
  • 您可以使用所选处理器提供的机制呼叫扩展程序,将其作为扩展功能实现。

或者,如果您知道该字符串包含由加号分隔的数字序列,那么您可以编写递归模板来提取令牌,将它们转换为数字,然后对它们求和。或者如果它总是两个数字,那么你甚至不需要递归。

正如经常发生的那样,仅举一个程序必须处理的输入示例是不够的;我们需要知道所有可能的输入是什么。

答案 1 :(得分:0)

我建议你这样试试:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/items">
    <xsl:variable name="subtotals">
        <xsl:for-each select="item">
            <amount>
                <xsl:value-of select="price * quantity"/>
            </amount>
        </xsl:for-each>
    </xsl:variable>
    <total>
        <xsl:value-of select="sum(exsl:node-set($subtotals)/amount)"/>
    </total>
</xsl:template>

</xsl:stylesheet>

应用于您的示例输入,结果将是:

<?xml version="1.0" encoding="UTF-8"?>
<total>64.6</total>