所以我有一个XML文件,并使用XSLT来构建HTML页面。 XML中的标题标记包括后跟::
后跟数字的文本。我设法提取数字,但我不知道如何总结数字。
<xsl:value-of select="number(substring-after(/searchresult/document[@id = current()/@refid]/title, ' ::'))/>
如果我这样做
<xsl:value-of select=" sum(number(substring-after(/searchresult/document[@id = current()/@refid]/title, ' ::')))>
它向我显示以下错误:
错误:该值不是节点集
我甚至尝试制作变量并将值存储在其中并尝试将其总结为:
<xsl:variable name="total">
<xsl:value-of select="number(substring-after(/searchresult/document[@id = current()/@refid]/title, ' ::'))"/>
</xsl:variable>
<xsl:value-of select="($total)"/>
<xsl:copy-of select="sum($total)"/>
但它然后向我显示了这个错误:
错误:无法将结果树片段作为XSLT下的节点集处理 1.0
如何获得从标题中解析的数字总和?请帮帮我......我迷路了。我非常感谢你的帮助。 谢谢。
答案 0 :(得分:0)
我通常喜欢使用XML片段来做这样的事情。
<xsl:variable name="Counter">
<xsl:for-each select="TITLETAG">
<Number>
<xsl:value-of select="substring-after(/title, ' ::')"/>
</Number>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="sum(number($Counter/*:Number/text()))" />
这应该给你解决方案或者至少是一个先机,假设当然有超过1个标题元素。请记住将TITLETAG更改为标题元素。
答案 1 :(得分:0)
您的描述令人困惑,因为它表明只有一个标题,因此只有一个数字。假设数字位于使用// title选择的节点中。
在XSLT 2.0中,它很简单:
sum(for $x in //title return number(substring-after($x, '::')))
在XSLT 1.0中,有三种方法可以对计算出的一组数字求和,而不是直接出现在源代码中。没有一个可以说是容易的。
(a)使用两相变换。构造一个临时树,其节点包含数字,使用xx:node-set()扩展名将其转换为节点集,然后将sum()函数应用于节点集。
(b)使用递归:编写一个递归命名模板,该模板重复调用自身来处理每个节点并累积总数,直到没有剩余的节点来处理
(c)使用Dimitre Novatchev的FXSL库提供的高阶函数。