如何在xslt中提取此格式

时间:2010-08-18 06:56:49

标签: xml xslt xpath

我有一个xml结构:

<Date>Mon, 11 Aug 2009 13:15:10 GMT</Date> 

我想只提取15:10或'15'和'10'。 使用xslt

的最佳方法是什么

3 个答案:

答案 0 :(得分:3)

如果日期仅在时间字段中包含冒号且时间始终以HH:MM:SS格式表示,则在第一次冒号后选择固定长度的子字符串应解决您的问题

未经测试的XSLT单行

<xsl:variable name="time" select="substring(substring-after(Date, ':'), 1, 5)"/>

答案 1 :(得分:2)

尝试以下;假设日期始终采用相同的格式。

<xsl:variable name='datetime' select="Date"/>

<xsl:variable name='time'  select='substring( $datetime, 17 , 5 )' />

答案 2 :(得分:1)

这是一个通用的XSLT解决方案,在将包含问题中指定格式的日期的字符串转换为XML结构化日期时也很有用:

这使用FXSL 1.x模板str-split-to-words来执行具有多个可能分隔符的标记化。

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ext="http://exslt.org/common">

   <xsl:import href="strSplit-to-Words.xsl"/>

   <xsl:output indent="yes" omit-xml-declaration="yes"/>

    <xsl:template match="/">

      <xsl:variable name="vwordNodes">
        <xsl:call-template name="str-split-to-words">
          <xsl:with-param name="pStr" select="/"/>
          <xsl:with-param name="pDelimiters" select="' ,'"/>
        </xsl:call-template>
      </xsl:variable>

      <xsl:variable name="vTokens" select="ext:node-set($vwordNodes)/*"/>

      <xsl:variable name="vrtfDateTimeStruct">
          <date>
            <week-day-name val="{$vTokens[1]}"/>
            <day val="{$vTokens[2]}"/>
            <month-name val="{$vTokens[3]}"/>
            <year val="{$vTokens[4]}"/>
            <time val="{$vTokens[5]}"/>
            <zone val="{$vTokens[6]}"/>
          </date>
      </xsl:variable>

      <xsl:value-of select=
       "substring(ext:node-set($vrtfDateTimeStruct)/*/time/@val,1,5)"/>
    </xsl:template>
</xsl:stylesheet>

在提供的XML文档上应用此转换时

<Date>Mon, 11 Aug 2009 13:15:10 GMT</Date>

生成了想要的结果

13:15

请注意:使用此代码片段将字符串完全转换为XML结构化日期:

      <xsl:variable name="vrtfDateTimeStruct">
          <date>
            <week-day-name val="{$vTokens[1]}"/>
            <day val="{$vTokens[2]}"/>
            <month-name val="{$vTokens[3]}"/>
            <year val="{$vTokens[4]}"/>
            <time val="{$vTokens[5]}"/>
            <zone val="{$vTokens[6]}"/>
          </date>
      </xsl:variable>