1

から(Twitter形式の例)

Tue, 15 May 2012 15:40:34 +0000

to (ISO形式の例)

2005-12-01T13:45:00

XSLTを使用する


これがXMLスニペットです

<item>
     <title>It's called "Kangaroo Care" - what parents can do to create a special bond and improve the health of their newborns: http://t.co/8MV8FpM4</title>
        <link>http://twitter.com/ProvHealth/statuses/202423233104973826</link>
        <description>It's called "Kangaroo Care" - what parents can do to create a special bond and improve the health of their newborns: &lt;a href="http://t.co/8MV8FpM4"&gt;http://t.co/8MV8FpM4&lt;/a&gt;</description>
     <pubDate>Tue, 15 May 2012 15:40:34 +0000</pubDate>
        <guid>http://twitter.com/ProvHealth/statuses/202423233104973826</guid>
        <author>ProvHealth@twitter.com (Providence Oregon)</author>
     <media:content type="image/jpg" height="48" width="48" url="http://a0.twimg.com/profile_images/748948431/cross_normal.png"/>
     <google:image_link>http://a0.twimg.com/profile_images/748948431/cross_normal.png</google:image_link>
        <twitter:metadata>
         <twitter:result_type>recent</twitter:result_type>
     </twitter:metadata>
 </item>
4

2 に答える 2

1

これにアプローチする方法についてのいくつかのアイデアがあります。

  1. 次の例のように、 部分文字列のラングリングを実行できます。XSLTを介してXMLで日付をフォーマットします。曜日や月ごとに、いくつかの「列挙型」を作成する必要があります。

  2. XPath 2.0は、XSD型のコンストラクター関数を提供し、部分文字列のラングリングに加えて、これらからいくつかのヘルプを得ることができます。

  3. トランスフォーマーがEXSLTをサポートしている場合は、 日付/時刻拡張機能を使用できます。

  4. EXSLTには正規表現のサポートもあり、これを使用してTwitterの日付をチャンクに解析し、ISOの日付にさらに変換することができます。

  5. XSLTを駆動して変換を実行するために使用するテクノロジーを使用してカスタム拡張関数を作成できます。

そうは言っても、XSLTで必要なことを達成するための1つの機能の「簡単な」方法はありません。

于 2012-05-15T18:15:18.880 に答える
1

これにより、d / m / yyyy hh:mm:ssAMがISO日付に変換されます。これについてはまだ時間がありませんが、これの続きになります。日と月が1文字か2文字になる可能性があるという事実は、それを複雑にしました。

  <!--Convert from 'd/m/yyyy hh:mm:ss AM' to YYYY-MM-DD-->
  <xsl:template name="ISODate">
    <xsl:param name="Date" />
    <xsl:param name="Year" />
    <xsl:param name="Month" />
    <xsl:param name="Day" />

    <xsl:choose>
      <xsl:when test="not($Month)">
        <xsl:call-template name="ISODate">
          <xsl:with-param name="Month" select="substring(concat('0',substring-before($Date,'/')), string-length(concat('0',substring-before($Date,'/'))) - 1, 2)" />
          <xsl:with-param name="Date" select="substring-after($Date,'/')" />
        </xsl:call-template>
      </xsl:when>
      <xsl:when test="not($Day)">
        <xsl:call-template name="ISODate">
          <xsl:with-param name="Month" select="$Month" />
          <xsl:with-param name="Day" select="substring(concat('0',substring-before($Date,'/')), string-length(concat('0',substring-before($Date,'/'))) - 1, 2)" />
          <xsl:with-param name="Date" select="substring-after($Date,'/')" />
        </xsl:call-template>
      </xsl:when>
      <xsl:when test="not($Year)">
        <xsl:call-template name="ISODate">
          <xsl:with-param name="Month" select="$Month" />
          <xsl:with-param name="Day" select="$Day" />
          <xsl:with-param name="Year" select="substring-before($Date,' ')" />
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="concat($Year,'-',$Month,'-',$Day)"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
于 2013-09-24T20:06:45.350 に答える