我有一个xml结构:
<Date>Mon, 11 Aug 2009 13:15:10 GMT</Date>
我想只提取15:10或'15'和'10'。 使用xslt
的最佳方法是什么答案 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>