倭マン's BLOG

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

Jaxen 苦闘 (6) :検索を実行する

今回は、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つのうちのいずれかでなければなりません:

  • ノード(型は扱うオブジェクトモデルによる)
  • ノードセット(java.lang.List オブジェクト*1
  • org.jaxen.Context オブジェクト

ただし、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 でのデータ型のキャスト」を参照。

*1:java.lang.Set ではダメなようです。