使用XSL

时间:2018-02-26 07:16:05

标签: xml xslt

我有我的xml文件

   <root>
         <item>Apple</item>
         <name><![CDATA[Indhu && Mathi]]></name>
         <date>28-02-2018</date>
         <dollar>500</dollar>
   </root>

将我的XSL文件设为:

      <xsl:import href="lookupValues.xsl"/>
       <xsl:template match="/">
         <html>
           <head></head>
           <body>
           <h1>Hello World</h1>
           <table border="1">
           <tr><td><xsl:value-of select="root/item"/></td> </tr>
           <tr><td><xsl:value-of select="root/name"/></td> </tr>
           <tr><td><xsl:value-of select="root/date"/></td></tr>


          <tr>
           <td> Date Format </td>
            <td><xsl:call-template name="format_date">
                <xsl:with-param name="arg" select="root/date" />
          </xsl:call-template> </td>
         </tr>       
           </table>
         </body>
         </html>
          </xsl:template>

此外,调用函数也被写为    lookupValues.xsl:

     <xsl:template name="format_date">
    <xsl:param name="arg"/>

    <xsl:variable name="vDay" select="substring-before($arg, '/')"/>        
    <xsl:variable name="vMonth" select="substring-before(substring-after($arg, '/'), '/')"/>        
    <xsl:variable name="vYear" select="substring-before(substring-after(substring-after($arg, '/'), '/'), ' ')"/>

    <xsl:if test="string-length($vDay) &lt; 3">
        <xsl:text>0</xsl:text>
    </xsl:if>
    <xsl:value-of select="$vDay"/>      
    <xsl:text>-</xsl:text>

    <xsl:if test="string-length($vMonth) &lt; 4">
        <xsl:text>0</xsl:text>
    </xsl:if>
    <xsl:value-of select="$vMonth"/>
    <xsl:text>-</xsl:text>

    <xsl:value-of select="$vYear"/>     
</xsl:template> 

我想以DD / MMM / YYYY格式打印我的日期。需要在我的代码中进行一些更正。我不确定这个功能。

2 个答案:

答案 0 :(得分:1)

XSLT 1.0不提供日期格式化的任何内置函数。有date time extensions稍微简化了使用日期的任务,但并非所有扩展都按照我们的要求工作。

您必须编写自定义模板来处理数字月份名称的转换,即02Feb。以下是将日期从DD-MM-YYYY格式转换为DD/MMM/YYYY格式的样式表。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    <xsl:output method="xml" />
    <xsl:strip-space elements="*" />

    <xsl:template match="root">
        <formattedDate>
            <xsl:call-template name="format-date">
                <xsl:with-param name="date" select="date" />
            </xsl:call-template>
        </formattedDate>
    </xsl:template>

    <xsl:template name="format-date">
        <xsl:param name="date" />
        <xsl:variable name="day" select="substring($date, 1, 2)" />
        <xsl:variable name="month" select="substring($date, 4, 2)" />
        <xsl:variable name="year" select="substring($date, 7, 4)" />
        <xsl:variable name="monthName">
            <xsl:call-template name="month-name">
                <xsl:with-param name="month" select="$month" />
            </xsl:call-template>
        </xsl:variable>
        <xsl:value-of select="concat($day, '/', $monthName, '/', $year)" />
    </xsl:template>

    <xsl:template name="month-name">
        <xsl:param name="month" />
        <xsl:choose>
            <xsl:when test="$month = 1">Jan</xsl:when>
            <xsl:when test="$month = 2">Feb</xsl:when>
            <xsl:when test="$month = 3">Mar</xsl:when>
            <xsl:when test="$month = 4">Apr</xsl:when>
            <xsl:when test="$month = 5">May</xsl:when>
            <xsl:when test="$month = 6">Jun</xsl:when>
            <xsl:when test="$month = 7">Jul</xsl:when>
            <xsl:when test="$month = 8">Aug</xsl:when>
            <xsl:when test="$month = 9">Sep</xsl:when>
            <xsl:when test="$month = 10">Oct</xsl:when>
            <xsl:when test="$month = 11">Nov</xsl:when>
            <xsl:when test="$month = 12">Dec</xsl:when>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

答案 1 :(得分:1)

如果日期的输入格式是永久性的,并且看起来像28-02-2018(dd-mm-yyyy),则可以简化从参数中捕获日期:

<xsl:template name="format_date">
    <xsl:param name="arg"/>
    <xsl:variable name="day">
        <xsl:value-of select="substring($arg,1,2)"/>
    </xsl:variable>
    <xsl:variable name="month">
        <xsl:value-of select="substring($arg,4,2)"/>
    </xsl:variable>
    <xsl:variable name="year">
        <xsl:value-of select="substring($arg,7,4)"/>
    </xsl:variable>
    <xsl:variable name="monthName">
        <xsl:call-template name="month-name">
            <xsl:with-param name="month" select="$month" />
        </xsl:call-template>
    </xsl:variable>
    <xsl:value-of select="concat($day, '/', $monthName, '/', $year)" />
</xsl:template>