私はXMLファイルを取得しているところに問題があります。取得する日付の形式は、mm/dd/yyyy
で、時にはm/d/yyyy
です。私の仕事は、スキーマがyyyy-mm-dd
しか受け付けない別のXMLファイルに変換することです。私はXSLT 1.0/XPATH 1.0を使用することに限定されています。これどうやってするの?XSLTは日付形式を変換する
答えて
あなたの質問は少し曖昧です。いくつかのサンプル入力と期待される出力が必要です。しかし、いずれにせよ、ここでは、あなたが望むところで最高の推測に対する答えがあります。
<?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="dates">
<xsl:copy>
<xsl:apply-templates select="*" />
</xsl:copy>
</xsl:template>
<xsl:template match="date">
<xsl:copy>
<xsl:value-of select="
concat(
substring-after(substring-after(.,'/'),'/') , '-',
format-number(number(substring-before(.,'/')), '00') , '-',
format-number(substring-before(substring-after(.,'/'),'/'), '00')
)
" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
が...この所望の出力を生成します。このスタイルシートによって変換さ
<?xml version="1.0"?>
<dates>
<date>11/12/2012</date>
<date>3/4/2011</date>
</dates>
... ... ...
<dates>
<date>2012-11-12</date>
<date>2011-03-04</date>
</dates>
:この入力を考えると
答えが正しい場合は、それにチェックを入れてください。私はこの解決策を確認しましたhttp://www.purplegene.com/static/transform.html
ドッグベーンのソリューションは私のものとよく似ていますが、彼は私をパンチに倒しました。それでも、私のソリューションは簡潔で読みやすいと思います。マクラーレンのソリューションは、文字列の長さが9の2012年1月12日のような日付では機能しません。 –
下記のXSLTが動作するはずです。ハードコーディングされた長さやインデックスは使用しませんが、代わりに日付文字列を '/'に分割して、日、月、および年のコンポーネントの場所を特定します。
XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<!-- match the date and invoke formatDate to format it -->
<xsl:template match="date">
<xsl:element name="date">
<xsl:call-template name="formatDate">
<xsl:with-param name="dateParam" select="." />
</xsl:call-template>
</xsl:element>
</xsl:template>
<xsl:template name="formatDate">
<xsl:param name="dateParam" />
<!-- input format mm/dd/yyyy or m/d/yyyy -->
<!-- output format yyyy-mm-dd -->
<!-- parse out the day, month and year -->
<xsl:variable name="month" select="substring-before($dateParam,'/')" />
<xsl:variable name="day" select="substring-before(substring-after($dateParam,'/'),'/')" />
<xsl:variable name="year" select="substring-after(substring-after($dateParam,'/'),'/')" />
<!-- now print them out. Pad with 0 where necessary. -->
<xsl:value-of select="$year" />
<xsl:value-of select="'-'" />
<xsl:if test="string-length($month) = 1">
<xsl:value-of select="'0'" />
</xsl:if>
<xsl:value-of select="$month" />
<xsl:value-of select="'-'" />
<xsl:if test="string-length($day) = 1">
<xsl:value-of select="'0'" />
</xsl:if>
<xsl:value-of select="$day" />
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
入力:
<input>
<date>04/30/2012</date>
<date>4/1/2012</date>
</input>
出力:
<?xml version="1.0" encoding="UTF-8"?>
<input>
<date>2012-04-30</date>
<date>2012-04-01</date>
</input>
'
それを指摘してくれてありがとう。私は私の答えを更新しました。 – dogbane
こんにちはチーム! 以下を参照してください:format-dateTime: http://stackoverflow.com/a/16892467/2816548 –
- 1. XSLTの日付形式
- 2. 変換日付形式
- 3. Perl日付形式変換
- 4. Metl - 変換日付形式
- 5. PHPの日付形式をJavaScriptの日付形式に変換するには?
- 6. 日付形式を変換する
- 7. 日付形式を変換する
- 8. 日付形式を変換するqlikview
- 9. 日付形式を別の形式に変換する方法
- 10. 日付形式を別の形式に変換するR
- 11. AngularJS - タイムスタンプの日付形式をJavaScript形式に変換する
- 12. 日付形式をExcel形式に変換する
- 13. javascriptで日付形式を別の形式に変換する
- 14. XSLT日付形式の変換[2100-10-10T23:59:59.000Z]。 GMTタイムゾーンを追加する
- 15. PHPの日付をjavascriptの日付形式に変換する
- 16. 非標準日付形式を日付に変換するR
- 17. 日付が "非形式的"形式に変換する
- 18. 日付形式はデータ形式で変換できません
- 19. 今日の日付をmm/dd/yyyy形式で日付形式の変数に変換する方法#
- 20. 変換日付の形式Perl
- 21. 日付形式のJavaでの変換?
- 22. RobotFramework:日付形式変換の問題
- 23. AIXサーバーの日付形式変換
- 24. Excel:日付形式へのテキスト変換
- 25. 変換日付オブジェクト:mm:ssの形式
- 26. Verticaの変換日付形式
- 27. 変換 '日付' 特定の形式
- 28. Java日付形式の変換
- 29. 長い形式の日付を短い形式に変換する方法DateTimeがC#の日付の日付
- 30. PHPは日付オブジェクト形式を変換します。 ** /日(+ 0700 1084640400000)/ **
あなたは'11/12/2012 'をどのように解釈しますか? 2つの形式のどちらをどのような場合に適用するかに関する規則を使用して質問を明確にする必要があります。 –
ソーススキーマが2012年11月12日である場合、ターゲットスキーマは2012-11-12(2012年11月12日と解釈される)のスキーマを持つ必要があります。 – TimWagaman