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

Xml 如何将字符串方程转换为数字?,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,I由a为以下字段生成: 214.2+428.4+结束 我以前使用过substring(prices,“+end”),但这是一个字符串 有什么办法可以把214.2+428.4进行总结吗 输入: xml: 12.50 2. 13.20 3. xsl: +end 输出: 25,39.6 高级版谢谢。如果字符串包含有效的XPath表达式(如示例中所示),则需要能够动态计算XPath表达式。但是,这不是XSLT 1.0的标准功能: 它在XSLT3.0中随xsl:evaluate指令一起提供 它在

I由a为以下字段生成: 214.2+428.4+结束

我以前使用过substring(prices,“+end”),但这是一个字符串

有什么办法可以把214.2+428.4进行总结吗

输入: xml:


12.50
2.
13.20
3.
xsl:

+end

输出: 25,39.6


高级版谢谢。

如果字符串包含有效的XPath表达式(如示例中所示),则需要能够动态计算XPath表达式。但是,这不是XSLT 1.0的标准功能:

  • 它在XSLT3.0中随xsl:evaluate指令一起提供
  • 它在许多XSLT处理器中作为供应商扩展提供(通常命名为xx:eval()或xx:evaluate()
  • 您可以使用所选处理器提供的调用扩展的机制,自己将其实现为一个扩展函数
或者,如果您知道字符串包含一个由加号分隔的数字序列,那么您可以编写一个递归模板来提取标记,将它们转换为数字,然后求和。或者如果它总是两个数字,那么您甚至不需要递归


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

我建议您这样尝试:

XSLT1.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>

64.6

请向我们展示您的原始输入。您开始的方式很可能不是最佳选择。xml:12.50 2 13.20 3 xsl:+end output:25+39.6您好,Michael,我需要的是您的替代方案。它总是包含以加号分隔的数字。在这种情况下,最简单的方法是查找str:tokenize无法转换:第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>