前回、XPath 1.0 で定義されているデータ型を見ました。 今回は、それらの型の間のキャスト(変換)ルールを見ていきます(記事一覧)。
ただし、ノードセット型以外の型からノードセット型への変換はされません。
ブール値への変換
boolean() 関数を用いて変換します。
引数の型 | true を返す場合 | false を返す場合 | サンプル |
---|---|---|---|
ノードセット | セットが空でないとき | セットが空のとき | |
数値 | 値が +0, -0, NaN 以外のとき | 値は +0, -0, NaN のとき | boolean(0) → false boolean(1.0) → true |
文字列 | 文字列の長さが1以上のとき | 文字列の長さが0のとき | boolean('') → false boolean('empty') → true |
数値への変換
number() 関数を用いて変換します。
引数の型 | 返す値 | サンプル |
---|---|---|
ノードセット | まず string() 関数によって文字列に変換し、その結果の文字列を number() 関数によって数値に変換。 | |
ブール値 | true の場合は1、false の場合は0 | number(true) → 1 number(false) → 0 |
文字列 | IEEE 754 にしたがって文字列から数値に変換。変換が出来なければ NaN | number('1.0') → 1.0 boolean('empty') → NaN |
文字列への変換
string() 関数を用いて変換します。
引数の型 | 返す値 | サンプル |
---|---|---|
ノードセット | ノードセットの中で(文書順で)最初のノードを文字列表現に変換。 ノードを文字列表現に変換するルールは下記参照。 | |
ブール値 | true の場合は 'true'、false の場合は 'false' | string(true) → 'true' string(false) → 'false' |
数値 | NaN なら 'NaN' に変換 ±0なら '0' に変換 +∞ なら 'Infinity' に変換 -∞ なら '-Infinity' に変換 値が整数なら、小数点がなく先頭に0がつかない形の数字の表記に変換。 値が整数でなければ、小数点を含み、その前後に少なくとも1つの数字がある形に変換。 |
string(10) → 10 string(10.0) → 10.0 |
ノードから文字列への変換
ノード型 | 変換後の文字列 |
---|---|
ルートノード | 全ての子孫テキストノードの内容を文書順に繋げた文字列 |
要素ノード | 全ての子孫テキストノードの内容を文書順に繋げた文字列 |
属性ノード | 属性値の文字列を正規化 (normalize) した文字列 |
名前空間ノード | 名前空間 URI を表す文字列 |
処理命令ノード | ターゲットから続く文字列(空白も含む) ただし '?>' は含まない |
コメントノード | コメントの内容 '' に挟まれた文字列 |
テキストノード | テキストの内容 |