0

XSL 1.0 で DateTime 2005-08-01T12:00:00 をフォーマットしようとしています。部分文字列関数を使用しようとしましたが、「T」がまだ来ています。出力を次のようにしたい -

<YEAR>2005</YEAR>
<MONTH>08</MONTH>
<DAY>01</DAY>
<HOUR>12<HOUR/>
<MINUTE>00<MINUTE/>
<SECOND>00<SECOND/>

これのスニペットを書き、入力値から 'T' を削除する方法は?

4

1 に答える 1

4

これにはsubstring関数を使用できます。文字列内の各文字のインデックスは 0 ではなく 1 から始まることに注意してください。したがって、年を取得するには、次のようにします (現在、日付要素に配置されていると仮定します)。

<YEAR><xsl:value-of select="substring(., 1, 4) " /></YEAR>

ここに完全な XSLT があります

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

   <xsl:template match="date">
      <date>
         <YEAR><xsl:value-of select="substring(., 1, 4) " /></YEAR>
         <MONTH><xsl:value-of select="substring(., 6, 2) " /></MONTH>
         <DAY><xsl:value-of select="substring(., 9, 2) " /></DAY>
         <HOUR><xsl:value-of select="substring(., 12, 2) " /></HOUR>
         <MINUTE><xsl:value-of select="substring(., 15, 2) " /></MINUTE>
         <SECOND><xsl:value-of select="substring(., 18, 2) " /></SECOND>
      </date>
   </xsl:template>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

以下のXMLに当てはめると

<dates>
   <date>2005-08-01T12:00:00</date>
</dates>

以下が出力されます

<dates>
   <date>
      <YEAR>2005</YEAR>
      <MONTH>08</MONTH>
      <DAY>01</DAY>
      <HOUR>12</HOUR>
      <MINUTE>00</MINUTE>
      <SECOND>00</SECOND>
   </date>
</dates>

明らかに、これが機能するには、日付が常に同じ形式で入力されていることを確認する必要があります。

于 2012-04-23T06:33:11.373 に答える