今回は、org.jaxen.XPath インターフェースに定義されている「検索を実行する」メソッド(以下、検索メソッド)を見ていきます(記事一覧)。
XPath インターフェースの宣言
検索メソッドは以下の6つ。
public interface XPath { ... Object evaluate(Object context)throws JaxenException; List selectNodes(Object context)throws JaxenException; Object selectSingleNode(Object context)throws JaxenException; boolean booleanValueOf(Object context)throws JaxenException; Number numberValueOf(Object context)throws JaxenException; String stringValueOf(Object context)throws JaxenException; }
valueOf() メソッドは非推奨 (deprecated) なので省略。
検索メソッドの引数
6つの検索メソッドは全て Object オブジェクトを引数に取ります。 ただし、これはどんな型でも良いわけではなく、次の3つのうちのいずれかでなければなりません:
ただし、null が渡されても構いません。 引数が null の場合の各メソッドの返り値は、以下の「検索メソッドの返り値」の箇所を参照。 org.jaxen.Context クラスは、今回は無視。 機会があればそのうち。
検索メソッドの返り値
XPath 1.0 には以下の4つのデータ型が定義されています(「XPath 1.0 に定義されているデータ型」参照):
- ノードセット (node-set)
- ブール値 (boolean)
- 数値 (number)
- 文字列 (string)
XPath の検索メソッドには、検索結果をそのまま java.lang.Object 型として返す evaluate() メソッドと、上記のデータ型に加えて単独のノードを表す「ノード (node)」型を加えた5つのデータ型に関して、検索結果をそれらの型にキャストして返す5つのメソッドがあります:
返り値のデータ型 | メソッド名 | Java での返り値の型 | 引数が null の場合の返り値 | 説明 |
---|---|---|---|---|
object | evaluate() | Object | 空のリスト (java.util.List) | 検索結果をキャストせずにそのまま Object 型として返します。 |
node-set | selectNodes() | List | 空のリスト (java.util.List) | ノードセットを返します。 検索結果がノードセットでない場合はそれらのオブジェクトのリスト (java.util.List) を返します。 |
node | selectSingleNode() | Object | null | ノードを返します。 検索結果がノードセットの場合は(文書順で)最初のノードを返します。 それ以外の型の場合はそれらを Object 型として返します。 |
boolean | booleanValueOf() | boolean | false | ブール値を返します。 検索結果がブール値でない場合は、boolean() 関数を用いてブール値に変換します。 |
number | numberValueOf() | Number | Double.NaN | 数値(倍精度浮動小数点数)を返します。 検索結果が数値でない場合は、number() 関数を用いて数値に変換します。 |
string | stringValueOf() | String | 空文字列 ("") | 文字列を返します。 検索結果が文字列でない場合は string() 関数を用いて文字列に変換します。 |
データ型のキャストに関しては「XPath 1.0 でのデータ型のキャスト」を参照。