我想使用XSLT 1.0实现这一目标。小时数以小时和分钟表示(例如:10:30基本上是10小时30分钟)。我需要将其转换为仅几小时(10.50),然后计算所有小时节点的总和。
以下是源XML文档:
<Record>
<hours>10:30</hours>
<hours>20:30</hours>
<hours>10:60</hours>
</Record>
输出:
<Record>
<TotalHours>42.0</TotalHours>
</Record>
答案 0 :(得分:0)
在XSLT 1.0中:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="Record">
<Record>
<TotalHours>
<xsl:value-of select="
sum(hours/number(substring-before(., ':'))) +
sum(hours/number(substring-after(., ':'))) div 60
"/>
</TotalHours>
</Record>
</xsl:template>
</xsl:transform>
<强> Working example 强>
如果你还想要分钟而不是一小时:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="Record">
<Record>
<TotalHours>
<xsl:value-of select="
concat(
sum(hours/number(substring-before(., ':'))) + floor(sum(hours/number(substring-after(., ':'))) div 60),
'.',
format-number(floor(sum(hours/number(substring-after(., ':'))) mod 60), '00')
)
"/>
</TotalHours>
</Record>
</xsl:template>
</xsl:transform>