0

私はxslt関連の初心者です。私はdateTime形式で苦労しています。私が必要としているのは、2011年12月2日2:57:18AMから12022011T02:57:18に変換することです

どうすればこれを行うことができますか?よろしくお願いします。良い例をお願いします!御時間ありがとうございます :)

4

2 に答える 2

0

xml サンプル

<?xml version="1.0" encoding="utf-8"?>
<root>
   <mydate atribdate="12/05/2010 22:10:10">01/10/2012 12:33:00</mydate>
   <mydate atribdate="">12/12/2012 12:33:00</mydate>    
</root> 

xsl サンプル xslt 1.0

 <?xml version="1.0"?>
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
     <xsl:template match = "/">
        <xsl:apply-templates select="root/mydate" />                       
     </xsl:template>
     <xsl:template match="mydate">        
             date element---><xsl:value-of select="translate(translate(.,'/',''),' ','T')"/>         
     date attirbute---><xsl:value-of select="translate(translate(@atribdate,'/',''),' ','T')"/> 
     </xsl:template>
  </xsl:stylesheet> 

出力xml

<?xml version="1.0" encoding="UTF-8"?>        
    date element---&gt;01102012T12:33:00         
    date attirbute---&gt;12052010T22:10:10        
    date element---&gt;12122012T12:33:00         
date attirbute---&gt;
于 2013-03-11T14:34:04.147 に答える
0

これはそれを行います:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />

  <xsl:template match="/">
    <xsl:call-template name="FormatDateTime">
      <xsl:with-param name="dateTime" select="'12/2/2011 2:57:18 AM'" />
    </xsl:call-template>
  </xsl:template>

  <xsl:template name="FormatDateTime">
    <xsl:param name="dateTime" />

    <xsl:call-template name="FormatDate">
      <xsl:with-param name="date" select="substring-before($dateTime, ' ')" />
    </xsl:call-template>
    <xsl:text>T</xsl:text>
    <xsl:call-template name="FormatTime">
      <xsl:with-param name="time" select="substring-after($dateTime, ' ')" />
    </xsl:call-template>
  </xsl:template>

  <xsl:template name="FormatTime">
    <xsl:param name="time" />
    <xsl:variable name="timeOnly" select="substring-before($time, ' ')" />
    <xsl:variable name="amPm" select="substring-after($time, ' ')" />
    <xsl:variable name="hour" select="substring-before($time, ':')" />
    <xsl:variable name="hourAdjusted" select="$hour mod 12 + 12 * ($amPm = 'PM')" />
    <xsl:variable name="afterHour" select="substring-after($timeOnly, ':')" />
    <xsl:variable name="minutes" select="substring-before($afterHour, ':')" />
    <xsl:variable name="seconds" select="substring-after($afterHour, ':')" />

    <xsl:value-of select="concat(format-number($hourAdjusted, '00'), ':', 
                                 format-number($minutes, '00'), ':',
                                 format-number($seconds, '00'))"/>
  </xsl:template>

  <xsl:template name="FormatDate">
    <xsl:param name="date" />
    <xsl:variable name="month" select="substring-before($date, '/')" />
    <xsl:variable name="afterMonth" select="substring-after($date, '/')" />
    <xsl:variable name="day" select="substring-before($afterMonth, '/')" />
    <xsl:variable name="year" select="substring-after($afterMonth, '/')" />

    <xsl:value-of select="concat(format-number($month, '00'),
                                 format-number($day, '00'),
                                 $year)"/>
  </xsl:template>
</xsl:stylesheet>

この XSLT にはサンプル値が含まれているため、実行すると次のようになります。

12022011T02:57:18

しかし、結果の形式を yyyy-MM-dd ではなく MMddyyyy にしたいですか? 実際に後者が必要な場合は、この部分を変更できます。

    <xsl:value-of select="concat(format-number($month, '00'),
                                 format-number($day, '00'),
                                 $year)"/>

これに:

    <xsl:value-of select="concat($year, '-',
                                 format-number($month, '00'), '-'
                                 format-number($day, '00'))"/>
于 2013-03-11T13:22:01.840 に答える