vulisiramu Ответов: 2

Как конвертировать формат даты в xslt (ММ/ДД/гггг)


Привет,


Как конвертировать формат даты в xslt. Я создал приложение, как показано ниже

Я использовал xml :
--------------
<TRSummary>
  <TravellerRequest>
    <TravelRequestNumber>338</TravelRequestNumber>
    <OriginatorName>SureshVL RonVL</OriginatorName>
        <RequestDate>2015-01-06T17:51:01.67+05:30</RequestDate>
    <CostCenter>800</CostCenter>
    <ProjectManagerName>Prasannavl Athinavl Athinavl</ProjectManagerName>
    <JobNumber>1234</JobNumber>
    <ElementNumber>1234</ElementNumber>
    <Remarks>remarks</Remarks>
    <ExpectedTravelCost>1200</ExpectedTravelCost>
    <PMC>Industry international</PMC>
  </TravellerRequest>
</TRSummary>



Мой xslt-файл :
--------------

<?xml version="1.0" encoding="utf-8"?>
<!-- Edited by XMLSpy� -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
     <xsl:for-each select="TRSummary">
      <html>
        <body>
          <table>
            <tr>
              <td>
            <xsl:value-of select="TravellerRequest/RequestDate"/>
              </td>
            </tr>
          </table>
        </body>
      </html>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>


в HTML-страницу выходит поставить такой :
---------------------------------------

Дата запроса: 2015-01-07T15:19:23.52+05:30

Как преобразовать вышеуказанный формат datetime в mm/dd/yyyy.

мне нужен такой вывод: 01.07.2015.

плз, веди меня.



Спасибо,
Баран...

Zoltán Zörgő

Есть прогресс? Если вы нашли мой исчерпывающий ответ, Пожалуйста, примите его формально.

2 Ответов

Рейтинг:
2

Zoltán Zörgő

Здесь у вас есть больше возможностей в зависимости от версии XSLT: http://blog.fpmurphy.com/2008/05/xslt-datetime-formatting.html[^]

Предположим, что следующая структура XML:

<TRSummary>
  <TravellerRequest>
    <TravelRequestNumber>338</TravelRequestNumber>
    <OriginatorName>SureshVL RonVL</OriginatorName>
        <RequestDate>2015-01-06T17:51:01.67+05:30</RequestDate>
    <CostCenter>800</CostCenter>
    <ProjectManagerName>Prasannavl Athinavl Athinavl</ProjectManagerName>
    <JobNumber>1234</JobNumber>
    <ElementNumber>1234</ElementNumber>
    <Remarks>remarks</Remarks>
    <ExpectedTravelCost>1200</ExpectedTravelCost>
    <PMC>Industry international</PMC>
  </TravellerRequest>
  <TravellerRequest>
    <TravelRequestNumber>338</TravelRequestNumber>
    <OriginatorName>SureshVL RonVL</OriginatorName>
        <RequestDate>2015-01-06T17:51:01.67+05:30</RequestDate>
    <CostCenter>800</CostCenter>
    <ProjectManagerName>Prasannavl Athinavl Athinavl</ProjectManagerName>
    <JobNumber>1234</JobNumber>
    <ElementNumber>1234</ElementNumber>
    <Remarks>remarks</Remarks>
    <ExpectedTravelCost>1200</ExpectedTravelCost>
    <PMC>Industry international</PMC>
  </TravellerRequest>
</TRSummary>

Это один из вариантов:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <html>
       <body>
          <table border="1">
            <xsl:apply-templates select="TRSummary/TravellerRequest"/>
          </table>
       </body>
    </html>
  </xsl:template>

  <xsl:template match="RequestDate">
    <td>
      <xsl:value-of select="format-dateTime(.,'[M01]/[D01]/[Y0001]')" />
    </td>
  </xsl:template>

  <xsl:template match="TravellerRequest">
     <tr>
       <xsl:apply-templates select="RequestDate"/>
     </tr>
   </xsl:template>

</xsl:stylesheet>

[Обновление]
Это тоже работает, но не так аккуратно:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
      <html>
        <body>
          <table>
            <xsl:for-each select="TRSummary/TravellerRequest">
             <tr>
              <td>
                <xsl:value-of select="format-dateTime(RequestDate,'[M01]/[D01]/[Y0001]')" />
               </td>
             </tr>
            </xsl:for-each>
          </table>
        </body>
      </html>
  </xsl:template>
</xsl:stylesheet>


[Обновление 2]
Это также работает с XSLT 1.0:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template name="formatdate">
     <xsl:param name="DateTimeStr" />

     <xsl:variable name="datestr">
         <xsl:value-of select="substring-before($DateTimeStr,'T')" />
     </xsl:variable>

     <xsl:variable name="mm">
         <xsl:value-of select="substring($datestr,6,2)" />
     </xsl:variable>

     <xsl:variable name="dd">
        <xsl:value-of select="substring($datestr,9,2)" />
     </xsl:variable>

     <xsl:variable name="yyyy">
        <xsl:value-of select="substring($datestr,1,4)" />
     </xsl:variable>

     <xsl:value-of select="concat($mm,'/', $dd, '/', $yyyy)" />
  </xsl:template>

  <xsl:template match="/">
      <html>
        <body>
          <table border="1">
            <xsl:for-each select="TRSummary/TravellerRequest">
             <tr>
              <td>
                <xsl:call-template name="formatdate">
                    <xsl:with-param name="DateTimeStr" select="RequestDate"/>
                </xsl:call-template>
               </td>
             </tr>
            </xsl:for-each>
          </table>
        </body>
      </html>
  </xsl:template>
</xsl:stylesheet>


vulisiramu

Я не могу найти решение, Пожалуйста, не могли бы вы мне помочь.

Zoltán Zörgő

Вы читали статью по ссылке?

vulisiramu

я не могу получить доступ к ссылке , потому что заблокировал этот url в моем офисе.

Zoltán Zörgő

См. раздел Обновление...

Zoltán Zörgő

Смотрите также обновление для решения, более похожего на ваш подход - но, пожалуйста, обратите внимание на переупорядочение элементов в xslt! ваш foreach приведет к появлению множества html-тегов и тела.. что недопустимо.

vulisiramu

в приведенном выше решении я получаю ошибку:
System.Xml.Xsl.XsltException: 'format-dateTime ()' - это неизвестная функция XSLT.

Zoltán Zörgő

Чем у вас есть XSLT 1.0, а не XSLT 2.0, но Вы нам об этом не сказали. Но вы можете легко использовать другие методы, представленные на связанной странице выше. Попробуйте что-нибудь и сами...

Zoltán Zörgő

См. также обновление 2, которое работает с XSLT 1.0.

Рейтинг:
0

Praveen Kumar Upadhyay

Ознакомьтесь с приведенной ниже статьей. Это может решить вашу проблему.
http://www.sixtree.com.au/articles/2013/formatting-dates-and-times-using-xslt-2.0-and-xpath/[^]


vulisiramu

Я не могу найти решение, Пожалуйста, не могли бы вы мне помочь.

vulisiramu

Привет Правин, пожалуйста, дайте ответ на вышеуказанный вопрос?

Praveen Kumar Upadhyay

format-date() не работает для вас?

Zoltán Zörgő

А как насчет решения, которое я дал? Это проверенная работа рекламы... обратите внимание, что ваш подход не будет действителен, если в xml содержится более одного запроса. Смотрите обновление для решения, более похожего на ваш подход - но, пожалуйста, обратите внимание на переупорядочение элементов в xslt!

Praveen Kumar Upadhyay

Окей. Тогда ОП может свободно принять ваше решение.

vulisiramu

хорошо, plz guid мне, как устранить эту ошибку:
я получаю ниже ошибки
Сведения об исключении: System.Xml.Xsl.XsltException: 'format-dateTime ()' - это неизвестная функция XSLT.