倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

XPath 1.0 でのデータ型のキャスト

前回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 を表す文字列
処理命令ノード ターゲットから続く文字列(空白も含む) ただし '?>' は含まない
コメントノード コメントの内容 '' に挟まれた文字列
テキストノード テキストの内容