Xml 如何将字符串方程转换为数字?
I由a为以下字段生成: 214.2+428.4+结束 我以前使用过substring(prices,“+end”),但这是一个字符串 有什么办法可以把214.2+428.4进行总结吗 输入: 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指令一起提供 它在
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>