2015-01-07 2 views
0

У меня есть требование, в котором мне нужно форматировать значение даты во входящем запросе. Я могу извлечь значение, однако оно не получается должным образом отформатированным.Дата форматирования с использованием XSLT

Ниже запрос ввода:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <Invoice Version="3.0"> 
     <Header> 
      <ThisDocumentIdentifier> 
       <DocumentIdentifier>0000001007128564</DocumentIdentifier> 
      </ThisDocumentIdentifier> 
      <ThisDocumentDateTime> 
       <DateTime DateTimeQualifier="On">20140429T031659Z</DateTime> 
      </ThisDocumentDateTime> 
      </Header> 
     </Invoice> 
    </soapenv:Body> 
</soapenv:Envelope> 

Значение Дата является 20140429T031659Z

Выход необходимо 2014-04-29T03: 16: 59Z

Ниже приведен код:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:dp="http://www.datapower.com/extensions"> 
    <xsl:template match="*[local-name()='DateTime']"> 
     <xsl:variable name="FormatDatetime"> 
      <xsl:value-of select="concat(substring(., 1, 4), '-', substring(., 5, 2), '-', substring(., 7, 2),substring(.,9,2),':',substring(.,11,2),':',substring(.,13,2),'Z')"/> 
     </xsl:variable> 
     <xsl:message dp:priority="debug"> Formatted date= <xsl:value-of select="$FormatDatetime"/> 
     </xsl:message> 
    </xsl:template> 
</xsl:stylesheet> 

Это выход я получаю 2014-04-29T0: 31: 65Z

По какой-то причине один из числа становится удалены, и я не знаю, почему?

Может кто-нибудь, пожалуйста, сообщите, где я делаю это неправильно?

Я также добавил «Т».

<xsl:value-of select="concat(substring(., 1, 4), '-', substring(., 5, 2), '-', substring(., 7, 2),'T',substring(.,9,2),':',substring(.,11,2),':',substring(.,13,2),'Z')"/> 

Получили выход в 2014-04-29TT0: 31: 65Z

Это обновленный рабочий код благодарственное в panhandel.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:dp="http://www.datapower.com/extensions"> 
    <xsl:template match="*[local-name()='DateTime']"> 
     <xsl:variable name="FormatDatetime"> 
      <xsl:value-of select="concat(substring(., 1, 4), '-', substring(., 5, 2), '-', substring(., 7, 2),substring(.,9,3),':',substring(.,11,2),':',substring(.,13,2),'Z')"/> 
     </xsl:variable> 
     <xsl:message dp:priority="debug"> Formatted date= <xsl:value-of select="$FormatDatetime"/> 
     </xsl:message> 
    </xsl:template> 
</xsl:stylesheet> 

ответ

2

Похоже, вы замкнуты на T03 часть на один символ с помощью substring(.,9,2).

Это должно быть substring(.,9,3)

+1

Благодаря panhandel своей работы :) –

+0

Что касается вашего редактирования, если есть требование, чтобы добавить T вручную, вы просто хотите изменить подстроку (., 9,2), чтобы подстроки (., 10,2) – panhandel

Смежные вопросы