我为每个以下字段生成一个: 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
先谢谢你。
答案 0 :(得分:0)
如果字符串包含有效的XPath表达式(就像在您的示例中那样),那么您需要能够动态评估XPath表达式。但这不是XSLT 1.0的标准功能:
或者,如果您知道该字符串包含由加号分隔的数字序列,那么您可以编写递归模板来提取令牌,将它们转换为数字,然后对它们求和。或者如果它总是两个数字,那么你甚至不需要递归。
正如经常发生的那样,仅举一个程序必须处理的输入示例是不够的;我们需要知道所有可能的输入是什么。
答案 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>