XSLT 6章 追加の関数
- 6.1 複数のソースドキュメント
- 6.2 キー
- 6.3 数字のフォーマット
- 6.4 その他の追加関数
6.3 数字のフォーマット
string format-number(number, string, string?)
format-number 関数は、指定されたフォーマットパターン文字列を使用し、指定された数値を文字列に変換します。1番目の引数は必須であり、変換したい数値を指定します。2番目の引数も必須であり、フォーマットパターン文字列を指定します。省略可能である 3番目の引数については後述します。フォーマットパターン文字列は JDK 1.1 の DecimalFormat クラスが規定する構文で表されます。
フォーマットパターン文字列には、先行するゼロと後続するゼロを出力するかどうか、数値の少数部分を出力するかどうか等を指定します。
- 整数部分は必要なだけ多くの数字を含む。
- 数字 3つ置きにグループ区切り文字で区切る。
- 整数部分がゼロである少数の場合は、小数点の前にゼロを一つ置く。
- 小数点以下は 3桁まで出力する。ただし、小数第一位を除きゼロは出力しない。
たとえば、上記の条件を満たすフォーマットパターン文字列は以下の通りです。
#,##0.0##
デフォルトでは、上記のような表記方法になりますが、会計処理の時などにはマイナスの符号を "▲" で出力したいときや、複数のパターンを使い分けたいこともあるかもしれません。そういった際にはトップレベル要素である xsl:decimal-format 要素を使用して、デシマルフォーマットを定義します。
<xsl:decimal-format name = qname decimal-separator = char grouping-separator = char infinity = string minus-sign = char NaN = string percent = char per-mille = char zero-digit = char digit = char pattern-separator = char />
属性はすべて任意指定であり、指定するものは以下のようになります。
属性 | 内容 | デフォルト |
---|---|---|
name | ここで指定された名前によって、format-number 関数は、使用する xsl:decimal-format 要素を特定します。 | デフォルトのデシマルフォーマットを確立
|
decimal-separator | 小数点記号として使用する文字 | ピリオド "."
|
grouping-separator | 数字を何桁置きかで区切る文字 | コンマ ","
|
infinity | 無限大を表すために使う文字列 | Infinity
|
minus-sign | デフォルトのマイナス記号として使う文字 | ハイフン "-"
|
NaN | NaN 型の値を表すために使う文字列 | NaN
|
percent | パーセント記号として使う文字 | %
|
per-mille | パーミル (千分率) 記号として使う文字 | ‰
|
zero-digit | 数表記用数字のゼロに使う文字 | ゼロ "0"
|
digit | フォーマットパターンに含まれる数字の表記に使う文字 | #
|
pattern-separator | パターン内のプラスのサブパターンとマイナスのサブパターンを区切るために使う文字 | セミコロン ";"
|
name 属性を持つデシマルフォーマットを使用するときは format-number 関数の 3番目の引数に使用したいデシマルフォーマットの名前を指定します。また、同一の名前を持つ xsl:decimal-format 要素を宣言することはできません。
<root> <number>1000</number> <number>-1000</number> <number>0.1</number> </root>
<xsl:decimal-format name="myFormat" grouping-separator="," minus-sign="▲" /> <xsl:template match="root"> <root> <xsl:for-each select="number"> <number> <xsl:value-of select="format-number(., ',##0.0##')"/> = <xsl:value-of select="format-number(., ',##0.###', 'myFormat')"/> </number> </xsl:for-each> </root> </xsl:template>
上の XML 文書に下のスタイルシートを適用すると以下の出力を得ます。
<root> <number>1,000.0 = 1,000</number> <number>-1,000.0 = ▲1,000</number> <number>0.1 = 0.1</number> </root>