You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XSLT 1.0将小时分钟数值转换为PT*H*M时长格式

XSLT 1.0 小时数值转PTnHnM时长格式实现

需求是将输入的小时单位数值(支持小数)转换为ISO 8601标准的PT*H*M时长格式,适配XSLT 1.0版本,对应转换规则:

  • 输入1 → 输出PT1H
  • 输入6.5 → 输出PT6H30M
  • 输入0.5(原示例此处笔误写为6.5)→ 输出PT30M

直接用XSLT 1.0内置数学函数计算即可,不需要额外扩展,完整转换代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:cre="替换为你的cre命名空间实际地址">
  <!-- 身份模板,原样复制其余不需要转换的节点、属性 -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- 匹配timeTotal节点执行格式转换 -->
  <xsl:template match="cre:timeTotal">
    <xsl:copy>
      <xsl:variable name="totalVal" select="number(.)"/>
      <xsl:variable name="hours" select="floor($totalVal)"/>
      <!-- 小数部分转分钟,四舍五入规避浮点计算误差 -->
      <xsl:variable name="minutes" select="round(($totalVal - $hours) * 60)"/>
      
      <xsl:text>PT</xsl:text>
      <xsl:if test="$hours > 0">
        <xsl:value-of select="$hours"/>
        <xsl:text>H</xsl:text>
      </xsl:if>
      <xsl:if test="$minutes > 0">
        <xsl:value-of select="$minutes"/>
        <xsl:text>M</xsl:text>
      </xsl:if>
      <!-- 处理输入为0的边界情况,避免输出非法的空PT -->
      <xsl:if test="$hours = 0 and $minutes = 0">
        <xsl:text>0H</xsl:text>
      </xsl:if>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

使用注意事项:

  • 把代码里cre前缀对应的命名空间地址替换为你业务中实际使用的地址,否则无法匹配到目标节点
  • 分钟计算默认用四舍五入,如果业务要求截断取整,把round换成floor即可
  • 代码兼容所有标准XSLT 1.0解析器,不需要依赖任何第三方扩展函数

内容的提问来源于stack exchange,提问作者Simran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:09:09