2017-02-07 11 views
1

Как следует преобразовать dateTime в XSLT, если я получаю dateTime по Гринвичу в ниже форматеКак конвертировать DATETIME при преобразовании XML с помощью XSLT

ввод XML:

<items>   
     <item> 
      <lastname>Lisa</lastname> 
      <firstname>Rimpell</firstname> 
      <checkintime>2017-02-05T05:40:00+03:00</checkintime> 
      <chekouttime>2017-02-05T10:40:00+03:00</chekouttime> 
      <address></address> 
     </item> 
</items> 

XSLT является:

<xsl:template match="/"> 
    <Response> 
     <Data> 
      <xsl:call-template name="Buildusers" /> 
     </Data> 
    </Response> 
</xsl:template> 
<xsl:template name="Buildusers"> 
    <Rows> 
     <xsl:for-each select="//items/item">  
      <Row Action="ADD"> 
       <xsl:value-of select="lastname" /> 
       |<xsl:value-of select="firstname" /> 
       |<xsl:value-of select="checkintime" /> 
       |<xsl:value-of select="chekouttime" /> 
       |<xsl:value-of select="address" /> 
      </Row>    
     </xsl:for-each> 
    </Rows> 
</xsl:template> 

Мне нужно построить строки, как показано ниже, с преобразованием 'dateTime. То есть, когда я получаю значение dateTime оно должно преобразовать и построить строку

Ожидаемый результат:

Lisa|Rimpell|2017-02-05 02:40:00|2017-02-05 07:40:00|| 
+0

У вас есть доступ к XSLT 2.0 или вы должны использовать XSLT 1.0 или 1.1? – JefferMC

+0

Мне нужно интегрироваться с .net-приложением. не уверен, могу ли я использовать 2.0 – user3067170

+0

@ user3067170 Я предлагаю вам приложить усилия для интеграции процессора XSLT 2.0 в вашу цепочку, потому что делать это в XSLT 1.0 намного сложнее **. –

ответ

0

В XSLT 2.0, вы можете сделать:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:my="http://www.example.com/my" 
exclude-result-prefixes="xs my"> 
<xsl:output method="xml" indent="yes" version="1.0" encoding="UTF-8" /> 
<xsl:strip-space elements="*" /> 

<xsl:function name="my:adjust-dateTime"> 
    <xsl:param name="dateTime"/> 
    <xsl:variable name="UTC" select="adjust-dateTime-to-timezone($dateTime, xs:dayTimeDuration('PT0H'))"/> 
    <xsl:sequence select="format-dateTime($UTC, '[Y0001]-[M01]-[D01] [H01]:[m01]:[s01]')" /> 
</xsl:function> 

<xsl:template match="/items"> 
    <Response> 
     <Data> 
      <Rows> 
       <xsl:for-each select="item"> 
        <Row Action="ADD"> 
         <xsl:value-of select="lastname, firstname, my:adjust-dateTime(checkintime), my:adjust-dateTime(chekouttime), address" separator="|" /> 
        </Row>    
       </xsl:for-each> 
      </Rows> 
     </Data> 
    </Response> 
</xsl:template> 

</xsl:stylesheet> 

получить:

<?xml version="1.0" encoding="UTF-8"?> 
<Response> 
    <Data> 
     <Rows> 
     <Row Action="ADD">Lisa|Rimpell|2017-02-05 02:40:00|2017-02-05 07:40:00|</Row> 
     </Rows> 
    </Data> 
</Response> 
+0

Я попытался реализовать то же самое. он говорит: «adjust-dateTime()» - неизвестная функция XSLT. я делаю это неправильно – user3067170

+0

Это решение требует процессора XSLT 2.0. –