<xsl:mode on-no-match="shallow-copy"/>
определено в https://www.w3.org/TR/xslt-30/#built-in-templates-shallow-copy,, в основном, для одного безымянного режима вы можете заменить его в XSLT 2 или 1, где вы не выполняете потоковую передачу с преобразованием идентичности (см. Также https://www.w3.org/TR/xslt20/#shallow-copy) template:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
Что касается форматирования продолжительности, вычисленной из суммы ваших значений времени, преобразованных в xs:dayTimeDuration
с в XSLT 2, я думаю, что
<xsl:function name="mf:format-duration" as="xs:string">
<xsl:param name="duration" as="xs:dayTimeDuration"/>
<xsl:sequence select="concat(format-number(xs:integer(floor($duration div xs:dayTimeDuration('PT1H'))), '00'), ':', format-number(minutes-from-duration($duration), '00'))"/>
</xsl:function>
делает это.
Онлайн-образец на http://xsltransform.hikmatu.com/nc4NzPS.
Обратите внимание, что в исходном входном образце были пустые Hours
элементы, для их обработки требуется дополнительная спецификация о том, как преобразовать их во время или длительность.и должен быть реализован.