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>
Zoltán Zörgő
Смотрите также обновление для решения, более похожего на ваш подход - но, пожалуйста, обратите внимание на переупорядочение элементов в xslt! ваш foreach приведет к появлению множества html-тегов и тела.. что недопустимо.
Zoltán Zörgő
Чем у вас есть XSLT 1.0, а не XSLT 2.0, но Вы нам об этом не сказали. Но вы можете легко использовать другие методы, представленные на связанной странице выше. Попробуйте что-нибудь и сами...