Вот общее решение 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>