首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在XSLT1.0中格式化24小时时间的最佳方式是什么?

在XSLT1.0中格式化24小时时间的最佳方式是什么?
EN

Stack Overflow用户
提问于 2008-09-26 22:45:47
回答 6查看 3K关注 0票数 2

我很难找到采用时间格式并轻松确定其是否有效的好方法,然后使用XSLT1.0生成一个具有某种格式的结果元素。

考虑到以下xml:

代码语言:javascript
复制
<root>
    <srcTime>2300</srcTime>
</root>

如果能够生成结果xml将是很棒的:

代码语言:javascript
复制
<root>
    <dstTime>23:00</dstTime>
</root>

但是,如果源xml包含无效的24小时时间格式,则生成的dstTime元素应为空。

例如,当无效的源xml如下所示:

代码语言:javascript
复制
<root>
    <srcTime>NOON</srcTime>
</root>

产生的xml应该是:

代码语言:javascript
复制
<root>
    <dstTime></dstTime>
</root>

问题是,什么是最好的XSLT1.0片段,可以编写以产生所需的结果?希望保持它非常简单,而不必解析每一段时间(也就是说,模式匹配(如果可能的话)将是甜蜜的)。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-09-27 21:39:46

XSLT1.0中没有任何正则表达式,因此恐怕模式匹配是不可能的。

我不清楚<srcTime>23:00</srcTime>是否合法?如果是,试着:

代码语言:javascript
复制
<dstTime>
  <xsl:if test="string-length(srcTime) = 4 or
                string-length(srcTime) = 5">
    <xsl:variable name="hour" select="substring(srcTime, 1, 2)" />
    <xsl:if test="$hour >= 0 and 24 > $hour">
      <xsl:variable name="minute">
        <xsl:choose>
          <xsl:when test="string-length(srcTime) = 5 and
                          substring(srcTime, 3, 1) = ':'">
            <xsl:value-of select="substring(srcTime, 4, 2)" />
          </xsl:when>
          <xsl:when test="string-length(srcTime) = 4">
            <xsl:value-of select="substring(srcTime, 3, 2)" />
          </xsl:when>
        </xsl:choose>
      </xsl:variable>
      <xsl:if test="$minute >= 0 and 60 > $minute">
        <xsl:value-of select="concat($hour, ':', $minute)" />
      </xsl:if>
    </xsl:if>
  </xsl:if>
</dstTime>

如果不是,只有四位数才是合法的:

代码语言:javascript
复制
<dstTime>
  <xsl:if test="string-length(srcTime) = 4">
    <xsl:variable name="hour" select="substring(srcTime, 1, 2)" />
    <xsl:if test="$hour >= 0 and 24 > $hour">
      <xsl:variable name="minute" select="substring(srcTime, 3, 2)" />
      <xsl:if test="$minute >= 0 and 60 > $minute">
        <xsl:value-of select="concat($hour, ':', $minute)" />
      </xsl:if>
    </xsl:if>
  </xsl:if>
</dstTime>
票数 5
EN

Stack Overflow用户

发布于 2008-09-26 22:53:20

XSLT1.0对日期/时间操作没有任何标准支持。

您必须编写一个简单的解析和格式化函数。这不会很简单,也不会很漂亮。

XSLT实际上是为树转换而设计的。这种文本节点操作最好在XSLT之外完成。

票数 3
EN

Stack Overflow用户

发布于 2008-09-30 21:03:44

根据实际使用的xslt处理器,您可以在自定义扩展函数中执行所需的操作(您必须自己动手)。

Xalan对扩展函数有很好的支持,不仅可以用JavaScript编写,也可以用阿帕奇BSF支持的其他语言编写。

微软的XSLT引擎也支持自定义扩展,如.NET框架开发人员指南,扩展XSLT样式表所述

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/142400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档