String XSLT 2.0被视为字符串的值之和
我面临着一个我认为很简单的问题,但我被卡住了。 下面是一个xml数据String XSLT 2.0被视为字符串的值之和,string,sum,xslt-2.0,String,Sum,Xslt 2.0,我面临着一个我认为很简单的问题,但我被卡住了。 下面是一个xml数据 <?xml version="1.0" encoding="UTF-8"?> <report endDate="2013/02/01 15:10:14" environment="Q000" startDate="2013/01/25 15:10:14"> <distrib appCode="LI" busLine="IL" context="" id="2013-01-25-15.10.11.7
<?xml version="1.0" encoding="UTF-8"?>
<report endDate="2013/02/01 15:10:14" environment="Q000" startDate="2013/01/25 15:10:14">
<distrib appCode="LI" busLine="IL" context="" id="2013-01-25-15.10.11.785293" network="FBB" subNetwork="Z">
<deliv id="2013-01-25-15.10.11.785295" mode="1" role="">
<comm id="2013-01-25-15.10.11.785297" role="">
<group id="001">
<doc id="950955269" nbPages="1" templateId="LVMED1" />
</group>
<group id="002">
<doc id="950955270" nbPages="6" templateId="BALVANW_FA" />
</group>
<group id="003">
<doc id="950955271" nbPages="" templateId="LVMED23" />
</group>
</comm>
</deliv>
</distrib>
<distrib appCode="LI" busLine="IL" context="" id="2013-01-25-15.18.29.871466" network="FBB" subNetwork="Z">
<deliv id="2013-01-25-15.18.29.871468" mode="1" role="">
<comm id="2013-01-25-15.18.29.871469" role="">
<group id="001">
<doc id="950955331" nbPages="2" templateId="LVMED10" />
</group>
</comm>
</deliv>
</distrib>
</report>
我想对元素“doc”中的属性页的内容求和
以下是我使用的xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="text" />
<xsl:template match="report">
<xsl:value-of select="count(//doc)"/>
<xsl:value-of select="sum(//doc[@nbPages])"/>
</xsl:template>
</xsl:stylesheet>
计数很有效,但总数不起作用
[Saxon PE 9.3.0.5]无法将字符串{}转换为双精度
我尝试过使用以下替代方案,但没有成功:
<xsl:value-of select="sum(number(//doc[@nbPages]))"/>
<xsl:value-of select="sum(//doc[number(@nbPages)])"/>
非常感谢您的帮助。您的XPATH对于求和函数是错误的 自
//doc[@nbPages]
:此XPath返回节点,而不是nbPages
属性的值
这样做:-
//doc[非(@nbPages)或@nbPages!='']/@nbPages
:此XPath检查nbPages
属性是否存在且不为空
sum(//doc[not(@nbPages) or @nbPages!='']/@nbPages)
<xsl:value-of select="sum(//doc[not(@nbPages) or @nbPages!='']/@nbPages)"/>
sum(//doc[不是(@nbPages)或@nbPages!='']/@nbPages)
XSLT:
像这样使用xpath表达式:
<xsl:value-of select="sum(//doc/@nbPages)"/>
同样的问题在这里:
使用:
sum(//doc/@nbPages[number(.) = number(.)])
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:value-of select="sum(//doc/@nbPages[number(.) = number(.)])"/>
</xsl:template>
</xsl:stylesheet>
9
这是一个完整的转换:
sum(//doc/@nbPages[number(.) = number(.)])
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:value-of select="sum(//doc/@nbPages[number(.) = number(.)])"/>
</xsl:template>
</xsl:stylesheet>
9
谢谢!我确实误解了[]操作符的用法:-/@user2032839:如果您认为,这个答案很有帮助。您需要单击我答案左侧的勾号。是,除非@nbPages为空时它不起作用。我们需要检查第一个答案中显示的这个。太好了!这也适用于表示数字的节点:
This/node/here/number(.)
。