XSLTを使用してXMLファイルを作成しています。日時にはミリ秒があります。ミリ秒なしで出力XMLを取得する必要があります。
フォーマットはYYYY-MM-DDTHH:MM:SS
例えば:
XMLは日付を次のように表示します:2012-12-341T09:26:53.132-0500
しかし、これは次のようにする必要があります。2012-12-341T09:26:53
XSLTを使用してXMLファイルを作成しています。日時にはミリ秒があります。ミリ秒なしで出力XMLを取得する必要があります。
フォーマットはYYYY-MM-DDTHH:MM:SS
例えば:
XMLは日付を次のように表示します:2012-12-341T09:26:53.132-0500
しかし、これは次のようにする必要があります。2012-12-341T09:26:53
すべての値がdateTimeであり、が含まれている場合は.
、次を使用できますsubstring-before()
。
substring-before('2012-12-341T09:26:53.132-0500', '.')
substring()
最初の20文字を選択するために使用できます。
substring('2012-12-341T09:26:53.132-0500', 0, 21)
XSLT2を使用している場合は、次の関数を参照してください:http ://www.w3.org/TR/xslt20/#function-format-dateTime 。この絵の文字列はあなたが望むものを与えるはずです:
format-dateTime($dateTime,'[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]')
この XPath 式は、文字列にドットまたはハイフン、またはドットとハイフンの両方が含まれているかどうかに関係なく、必要な結果を生成し、年、月、日に使用される桁数に依存しません。
substring-before(concat(substring-before(concat(substring-after(.,'T'),
'.'),
'.'),
'-'),
'-')
この XPath 式を使用した簡単な XSLT 変換を次に示します。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="dt/text()">
<xsl:value-of select="substring-before(., 'T')"/>
<xsl:text>T</xsl:text>
<xsl:value-of select=
"substring-before(concat(substring-before(concat(substring-after(.,'T'),
'.'),
'.'),
'-'),
'-')
"/>
</xsl:template>
</xsl:stylesheet>
この変換がこのテスト XML ドキュメントに適用されると、次のようになります。
<t>
<dt>2012-12-341T09:26:53.132-0500</dt>
<dt>2012-12-355T09:34:56</dt>
<dt>2012-12-355T09:34:56-0500</dt>
<dt>2012-12-13T9:34:5-0500</dt>
<dt>2012-12-344T09:12:34.378-0500</dt>
</t>
必要な正しい結果が生成されます。
<t>
<dt>2012-12-341T09:26:53</dt>
<dt>2012-12-355T09:34:56</dt>
<dt>2012-12-355T09:34:56</dt>
<dt>2012-12-13T9:34:5</dt>
<dt>2012-12-344T09:12:34</dt>
</t>
説明:
センチネルの適切な適用。