Как извлечь этот формат в xslt - PullRequest
2 голосов
/ 18 августа 2010

У меня есть структура xml:

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

Я хочу извлечь только 15:10 или «15» и «10». Каков наилучший способ сделать это с помощью xslt

Ответы [ 3 ]

3 голосов
/ 18 августа 2010

Если дата содержит двоеточие только в поле времени и время всегда представлено в формате ЧЧ: ММ: СС, то выбор подстроки фиксированной длины после первого двоеточия должен решить вашу проблему

непроверенный XSLT однострочный

<xsl:variable name="time" select="substring(substring-after(Date, ':'), 1, 5)"/>
2 голосов
/ 18 августа 2010

Попробуйте ниже; предполагается, что дата всегда в одном и том же формате.

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

<xsl:variable name='time'  select='substring( $datetime, 17 , 5 )' />
1 голос
/ 18 августа 2010

Вот общее решение 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...