1
A
答えて
1
出典:http://geekswithblogs.net/workdog/archive/2007/02/08/105858.aspx#110623
は2007年1月20日 『『へ』2007年1月20日午前10時22分28秒PMを「私が変換するように変更しました』 ...それが役に立ついくつか見つけた人を救うために分
<xsl:template name="FormatDate">
<!-- expected date format 1/20/2007 10:22:28 PM [OR] 01/20/2007 10:22:28 PM -->
<xsl:param name="DateTime" />
<!-- new date format January 20, 2007 -->
<xsl:variable name="mo">
<xsl:value-of select="substring-before($DateTime,'/')" />
</xsl:variable>
<xsl:variable name="day-temp">
<xsl:value-of select="substring-after($DateTime,'/')" />
</xsl:variable>
<xsl:variable name="day">
<xsl:value-of select="substring-before($day-temp,'/')" />
</xsl:variable>
<xsl:variable name="year-temp">
<xsl:value-of select="substring-after($day-temp,'/')" />
</xsl:variable>
<xsl:variable name="year">
<xsl:value-of select="substring($year-temp,1,4)" />
</xsl:variable>
<xsl:choose>
<xsl:when test="$mo = '1' or $mo = '01'">January</xsl:when>
<xsl:when test="$mo = '2' or $mo = '02'">February</xsl:when>
<xsl:when test="$mo = '3' or $mo = '03'">March</xsl:when>
<xsl:when test="$mo = '4' or $mo = '04'">April</xsl:when>
<xsl:when test="$mo = '5' or $mo = '05'">May</xsl:when>
<xsl:when test="$mo = '6' or $mo = '06'">June</xsl:when>
<xsl:when test="$mo = '7' or $mo = '07'">July</xsl:when>
<xsl:when test="$mo = '8' or $mo = '08'">August</xsl:when>
<xsl:when test="$mo = '9' or $mo = '09'">September</xsl:when>
<xsl:when test="$mo = '10'">October</xsl:when>
<xsl:when test="$mo = '11'">November</xsl:when>
<xsl:when test="$mo = '12'">December</xsl:when>
</xsl:choose>
<xsl:value-of select="' '"/>
<xsl:if test="(string-length($day) < 2)">
<xsl:value-of select="0"/>
</xsl:if>
<xsl:value-of select="$day"/>
<xsl:value-of select="', '"/>
<xsl:value-of select="$year"/>
</xsl:template>
「
3
I.アンXSLT 1.0ソリューション他の回答よりもはるかに単純で短く、(曜日を生成していない):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">
<xsl:output method="text"/>
<my:months>
<m>Jan</m><m>Feb</m><m>Mar</m><m>Apr</m><m>May</m><m>Jun</m>
<m>Jul</m><m>Aug</m><m>Sep</m><m>Oct</m><m>Nov</m><m>Dec</m>
</my:months>
<xsl:variable name="vMonthNames" select=
"document('')/*/my:months/*"/>
<xsl:template match="text()">
<xsl:variable name="vnumMonth" select="substring-before(., '/')"/>
<xsl:variable name="vDay" select=
"substring-before(substring-after(., '/'), '/')"/>
<xsl:variable name="vYear" select=
"substring-before(substring-after(substring-after(., '/'), '/'), ' ')"/>
<xsl:value-of select=
"concat($vMonthNames[0+$vnumMonth], ' ',
$vDay, ', ',
$vYear
)"/>
</xsl:template>
</xsl:stylesheet>
この変換は、以下のXML文書に適用される:
<t>01/29/2012 00:00</t>
所望の結果が製造される:
Jan 29, 2012
II.In XSLT 2.0はあなたのことができる例えば、format-dateTime()
のような非常に強力な日時関数。この恐ろしく複雑な解決のために
Sunday, January 29, 2012
0
謝罪を、それがあげる:この変換は、同じXML文書(上記)に適用され
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="text()">
<xsl:variable name="vComps" select=
"tokenize(., '/')"/>
<xsl:variable name="vstdDate" select=
"concat(substring-before($vComps[3], ' '), '-',
$vComps[1], '-',
$vComps[2]
)"/>
<xsl:sequence select=
"format-date(xs:date($vstdDate), '[FNn], [MNn] [D], [Y]')"/>
</xsl:template>
</xsl:stylesheet>
は、望んでいた、正しい結果が生産されますあなたは正確に何をXSLT 1.0にしたい:
<xsl:variable name="months" select="'JanFebMarAprMayJunJulAugSepOctDec'" />
<xsl:variable name="weekdays" select="'Monday Tuesday WednesdayThursday Friday Saturday Sunday '" />
<xsl:template match="date">
<xsl:variable name="days">
<xsl:value-of select="
((substring(.,7,4) - 1970) * 365)+floor((substring(.,7,4) - 1970) div 4)+
substring('000,031,059,090,120,151,181,212,243,273,304,334,365',substring(.,1,2)*4-3,3)+
(substring(.,4,2)-1)+
(1-floor(((substring(.,7,4) mod 4) + 2) div 3))*floor((substring(.,1,2)+17) div 20)
" />
</xsl:variable>
<xsl:value-of select="concat(
normalize-space(substring($weekdays,(($days+3) mod 7) * 9 + 1, 9)),
', ',
substring($months,substring(.,1,2) * 3 - 2, 3),
' ',
substring(.,4,2) + 0,
', ',
substring(.,7,4)
)" />
</xsl:template>
変数「日」の建設が決定し、かなり複雑な式を使用しています1970年1月1日以降の日数。そこから3を足すのは簡単なことです(1970年1月1日が木曜日だったので)、substr
の変数weekdays
から曜日を取得するには、この数字のmod 7を使用します。
もしあなたが多くの日付で作業するつもりなら、XSLT2を手に入れよう!
関連する問題
- 1. XSL変換
- 2. XSL変換でのテンプレートマッチの定義方法は?
- 3. DateTimeFormatterからDateFormatへの変換
- 4. XSL変換とXPath
- 5. xslをhtmlに変換する方法は?
- 6. SQL DATEFORMATをPostgresに変換する
- 7. 文字列をDateFormatに変換する
- 8. SilverlightでのXSL変換
- 9. ISAM/WebSEALのXSL変換ルール
- 10. XSL変換の出力をフォーマット/インデントする方法
- 11. Javaでxsl変換を処理する方法の例
- 12. XMLでXSL変換に名前空間を含める方法
- 13. XMLをXSL-FOに変換する方法
- 14. SAPUI5 - Dateformat - Dateformatで日付をフォーマットする方法
- 15. 変更方法>と< xslの変換を使用してですか?
- 16. XSLでのソート方法は?
- 17. パラメータでのJavaでのXSL変換
- 18. .NETでSpire PDFConverterを使用してXSLをPDFに変換する方法は?
- 19. xmlnsによるXSL変換の問題
- 20. elemetsへのXSL変換属性
- 21. 要素へのxsl変換属性
- 22. xsltからxsl-foへの変換
- 23. xsltproc(メモリ不足)のXSL変換300M
- 24. XSLを使用した:HTML変換
- 25. xsl:各タグ値を変換する
- 26. xsl xml解析、変換、属性
- 27. XSL 1.0 GMTからローカルタイムに変換
- 28. 変換されたXMLをXSLで変換しますか?
- 29. XMLをXSLに変換してからHTMLに変換する
- 30. xmlをXHTMLに変換するXSL変換を作成する
これを確認してください。http://stackoverflow.com/q/500915/616412 –
それはXSLT 1.0または2.0であるかどうかに大きく依存します。 –