目次へ

4. Xpath の型と演算子

4.1 XPath の型

XPath の主な基本構造は式です。式は評価され、オブジェクトを生成します。このオブジェクトは以下の 4つの基本型のいずれかになります。

意味
node-set 重複がなく順序を持たないノードの集合
boolean true と false の2つの値のどちらかをとることができる。
number 浮動小数点数。倍精度 64 bit 形式の IEEE 754 の値(仮数部252、指数部211)
string ゼロ個以上の文字の並び

number は普通の数字の他、Not-A-Number (NaN)、正と負それぞれの無限大、正と負それぞれのゼロ等の特殊な数字も使えます。

XPath では変数を使用することができ、例えば x という変数は $x と記述します。変数の値はオブジェクトであり、式の値として使用できるいずれかの型を持ちます。また、上で挙げた型でなくてもかまいません。

4.2 演算子

XPath にも他のプログラミング言語と同様に演算子があります。XPath では以下のような演算子を使うことができます。

演算子 意味 優先順位
or 各オペランドを評価し、どちらかの値が true の場合は true、それ以外は false を返す 7
and 各オペランドを評価し、両方の値が true の場合は true、それ以外は false を返す 6
= オブジェクトが等しい場合、true を返す 5
!= オブジェクトが等しくない場合、true を返す
< 1番目の数値が2番目の数値より小さい場合、true を返す 4
<= 1番目の数値が2番目の数値以下の場合、true を返す
> 1番目の数値が2番目の数値より大きい場合、true を返す
>= 1番目の数値が2番目の数値以上の場合、true を返す
+ 加算する 3
- 減算する
* 乗算する 2
div 除算する
mod 除算の結果を切り捨てて余りを返す
| オペランドを結合する。ただしオペランドはノード集合でなければならない 1

演算子に関して以下のような注意点があります。

  • XPath 式を XML 文書内で使用する場合には、< 演算子や <= 演算子は、タグの開始や終了と解釈されることを避けるため XML 1.0 のルールに従い、< や <= のように書かなければなりません。
  • XMLでは名前に - を使用できるため、- 演算子の前に空白を入れなければならないケースがあります。たとえば、foo-bar は foo-bar という名前の子要素を含むノード集合になりますが、foo -bar は子要素 foo の文字列値を数値に変換した結果と、子要素 bar の文字列値を数値に変換した結果との差になります。
  • * は乗算の演算子として使用しますが、ノードテストでもあります。直前が @、::、(、[、, または演算子のときは * はノードテストとして処理されます。

例えば、1 + 2 * 3 では掛け算が優先されるため、足し算を優先させたい場合には (1 + 2) * 3 としますが、XPath でも同様に "(" と ")" を 使うことができます。

4.3 型変換

論理演算子 or は boolean どうしの演算を行ないますが、例えばオペランドに boolean 以外を指定するとどうなるのでしょうか? その場合、オペランドが boolean に変換されてから、演算が行なわれます。これは他の演算子や次章から説明する関数についても同様のことがいえます。この節ではどのような変換が行われるのかみていくことにします。

4.3.1 node-set 型への変換

『node-set に変換できる型のオブジェクトはない』と XPath 1.0 の仕様で定められているので、node-set が必要とされる場合に他の型を使用することはできません。

4.3.2 boolean 型への変換

number 型からの変換は、ゼロであるか NaN である場合に false になり、それ以外の場合は true となります。

node-set 型からの変換は、その node-set が空である場合に false になり、それ以外の場合は true となります。

string 型からの変換は、その文字列の長さがゼロである場合に false になり、それ以外の場合は true となります。

4.3.3 number 型への変換

string 型からの変換は、その文字列が表す数に変換され、それ以外の場合は NaN になります。なお、半角スペースは削除されてから変換が行われます。

boolean 型からの変換は、true ならば 1、false ならば 0 になります。

node-set 型からの変換は、一旦 string に変換されて、それから number に変換されることになっています。したがって、その node-set の中にあるノードの中でドキュメント順で 1番目にあるノードの文字列値の表す数、になります。

4.3.4 string 型への変換

node-set 型からの変換は、ノード集合内のノードのうち、ドキュメント順で最初のノードの文字列値を返して、node-set 型を string 型に変換します。ノード集合が空の場合には、空の文字列に変換します。

number 型からの変換は、NaN の場合は NaN という文字列に、正の無限大の場合は Infinity という文字列に、負の無限大の場合は -Infinity という文字列に、正と負のゼロは 0 という文字列に、それ以外の場合はその数の文字列表現になります。

boolean 型からの変換は、true と false がそれぞれ、true と false という文字列に変換されます。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp