首页 > 解决方案 > XSLT 2.0:增加时间和开场比赛

问题描述

首先,我将 XSLT 2.0 与 SAXON-HE 9.5.1.5 一起使用。

  1. 以下命令是否有任何替代方法?

    <xsl:mode on-no-match="shallow-copy"/>
    
  2. 在我的输入 XML 中,有一个时间字段将以 HH:MM 格式出现。我想添加它,结果格式也将仅为 HH:MM 格式。

输入 XML

    <Root>
     <Detail>
      <Time>24:00</Time>
     <Detail>
     <Detail>
      <Time>59:10</Time>
     <Detail>
     <Detail>
      <Time>4:59</Time>
     <Detail>
     <Detail>
      <Time></Time>
     <Detail>
     <Detail>
     <Detail>
    <Root>

将不胜感激快速帮助。

标签: xmlxslt

解决方案


要添加时间值,我建议

<xsl:variable name="totalTime"
   select="sum(Detail/Time ! 
                xs:dayTimeDuration(replace(., '(\d+):(\d+)', 'PT$1H$2M')))"/>

<xsl:value-of select="hours-from-duration($totalTime), 
                      format-number(minutes-from-duration($totalTime), '00')"
              separator=":"/>

将时间转换为持续时间的另一种方法是附加“:00”、转换为xs:time和减去xs:time('00:00:00')

至于xsl:mode,如果您升级到最近的版本(9.8 或 9.9),XSLT 3.0xsl:mode声明在 Saxon-HE 中可用。


推荐阅读