5.2 文字列関数
string string(object?)
string 関数は、オブジェクトを string 型に変換します。変換は 4.3.4 string 型への変換 の規定にしたがって行われます。引数が 4つの基本型以外の型のオブジェクトは、その型に応じた方法で文字列に変換されます。
引数を省略した場合は、コンテキストノードを唯一のメンバに持つノード集合を引数に指定したと見なします。
注: | string 関数は、ユーザに表示することを目的としてnumber 型を string 型に変換するものではありません。表示目的の場合は、[XSLT] の format-number 関数と xsl:number 要素を使用します。 |
string concat(string, string, string*)
concat 関数は引数に指定した文字列を連結して返します。
例えば concat('AB', 'CD', 'EF', 'GH') は ABCDEFGH を返します。
boolean starts-with(string, string)
starts-with 関数は、1番目の引数に指定した文字列が 2番目の引数に指定した文字列で始まっている場合に true を返し、それ以外は false を返します。ただし、2番目の引数が空文字列の場合は true を返します。
例えば starts-with('ABCDEFGH', 'ABCD') は true を返します。
boolean contains(string, string)
contains 関数は、1番目の引数に指定した文字列が 2番目の引数に指定した文字列を含んでいる場合に true を返し、それ以外は false を返します。ただし、2番目の引数が空文字列の場合は true を返します。
例えば contains('ABCDEFGH', 'CDE') は true を返します。
string substring-before(string, string)
substring-before 関数は、2番目の引数に指定した文字列が 1番目の引数に指定した文字列内で最初に見つかった場合に、その文字列よりも前にある文字列 (substring) を返します。2番目の引数に指定した文字列が 1番目の引数に指定した文字列内に含まれていない場合と、2番目の引数が空文字列の場合は、空の文字列を返します。
たとえば substring-before("1999/04/01","/") は 1999 を返します。
string substring-after(string, string)
substring-after 関数は、2番目の引数に指定した文字列が 1番目の引数に指定した文字列内で最初に見つかった場合に、その文字列よりも後にある文字列 (substring) を返します。2番目の引数に指定した文字列が 1番目の引数に指定した文字列内に含まれていない場合は、空の文字列を返します。ただし、2番目の引数が空文字列の場合は 1番目の引数を返します。
たとえば substring-after("1999/04/01","/") は 04/01 を返し、 substring-after("1999/04/01","19") は 99/04/01 を返します。
string substring(string, number, number?)
substring 関数は、1番目の引数に指定した文字列のうち、2番目の引数に指定した位置から始まる文字列 (substring) を、3番目の引数で指定した長さだけ返します。
たとえば substring("12345",2,3) は "234" を返します。3番目の引数を指定しないと、2番目の引数に指定した位置から最後までの文字列 (substring) を返します。たとえば substring("12345",2) は "2345" を返します。
より厳密に言うと、文字列内の各文字は位置情報を数値として持っていると見なします。つまり最初の文字の位置は 1 で、2番目の文字の位置は 2 とし、以下同様に続きます。最初の文字の位置を 0 として扱うプログラミング言語がありますが、それらとは異なりますので注意が必要です。
返す文字列 (substring) の文字数については次のようになります。まずその開始位置は、2番目の引数を丸めた値以上となります。また 3番目の引数を指定した場合は、2番目の引数を丸めた値と 3番目の引数を丸めた値の合計よりも小さい文字数になります。ここで使用する比較や加算は、標準の IEEE 754 のルールに従います。丸めについては、 round 関数を呼び出した場合と同様です。以下に、さまざまな特殊な例をあげます。
- substring("12345", 1.5, 2.6) は "234" を返します。
- substring("12345", 0, 3) は "12" を返します。
- substring("12345", 0 div 0, 3) は "" を返します。
- substring("12345", 1, 0 div 0) は "" を返します。
- substring("12345", -42, 1 div 0) は "12345" を返します。
- substring("12345", -1 div 0, 1 div 0) は "" を返します。
number string-length(string?)
string-length 関数は文字列内の文字数を返します。引数を省略した場合は、コンテキストノードの文字列値を引数に指定したと見なします。
例えば string-length('ABCDEFGH') は、8 を返します。
string normalize-space(string?)
normalize-space 関数は、引数に指定した文字列の空白文字を正規化して返します。つまり前後の空白文字を取り除き、連続する空白文字を 1 つの空白文字に置き換えます。引数を省略した場合は、コンテキストノードの文字列値を引数に指定したと見なします。
string translate(string, string, string)
translate 関数は、1番目の引数に指定した文字列内に 2番目の引数に指定した文字列内の文字があった場合、その文字を 3番目の引数に指定した文字列内の対応する位置の文字で置き換えて返します。
たとえば translate("bar","abc","ABC") は BAr を返します。
2番目の引数に指定した文字列が 3番目の引数に指定した文字列よりも長いために、2番目の引数に指定した文字列内の文字に対応する文字が 3番目の引数に指定した文字列内に存在しない場合は、1番目の引数に指定した文字列内の対応する文字を削除します。
たとえば translate("--aaa--","abc-","ABC") は "AAA" を返します。
2番目の文字列内に同じ文字が複数ある場合には、最初の文字を使用して置き換えが行われます。3番目の引数に指定した文字列が 2番目の引数に指定した文字列よりも長い場合には、2番目の引数に指定した文字列よりも長い部分の文字は無効となります。
注: | この translate 関数は、すべての言語で大文字と小文字の変換に使える十分な機能を有しているわけではありません。XPath の今後のバージョンでは、大文字と小文字の変換に使用できる関数が追加されるかもしれません。 |