倭マン's BLOG

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

Jaxen 苦闘 (3) :XPath オブジェクトを取得する

今回は org.jaxen.XPath オブジェクトの取得方法を見ていきます(記事一覧)。 とは言っても Factory クラスとかがあるわけでなく、XPath クラスの実装クラスを通常のコンストラクタインスタンス化するだけなので、XPath インターフェースにはどういった実装クラスがあるのかを見ていくだけですが。

org.jaxen.XPath の実装クラス


Jaxen プロジェクト内に定義されてある XPath クラスのサブクラスは次の5つです(jaxen-1.1.1):

  • BaseXPath
  • DOMXPath
  • JDOMXPath
  • Dom4jXPath
  • XOMXPath
  • JavaBeanXPath

以下で、BaseXPath クラスとそれ以外のクラスを分けて、それぞれのコンストラクタを見ていきます。

BaseXPath クラス


BaseXPath クラスは「独自の検索アルゴリズムを作成」したり、「独自のXML オブジェクトモデルを作成」したりしないのであればあまり使うことはないかと思いますが、少し触れておきます。

BaseXPath クラスには1つの public コンストラクタが定義されています:

public BaseXPath(String xpathExpr, Navigator navigator)

1つ目の引数は XPath 式を表す String オブジェクトです。 これは説明の必要はないでしょう。

2つ目の引数は org.jaxen.Navigator オブジェクトで、「独自の検索アルゴリズムを作成」したり「独自のXML オブジェクトモデルを作成」したりすることは、「独自の Navigator クラスを定義」することで実現します。 この方法はそのうちに(挫折しなければ)。

その他の XPath 実装クラス


DOMXPath, JDOMXPath, Dom4jXPath, XOMXPath はそれぞれ DOM, JDOM, dom4j, XOM のオブジェクトモデルに対する XPath の実装クラスです(needless to say?)。

JavaBeanXPath は、XPath 式を使って JavaBean の階層構造を検索しよう!って目的のものです。 深い階層構造を扱う場合は便利そうですが、JavaBean をバリバリ使うなら、Jakarta プロジェクトの commons-beanutils などを使った方がいいかも。

これらは全て BaseXPath クラスのサブクラスです。 定義されているコンストラクタはどれも XPath 式を表す文字列を引数にとるものだけです。

Dom4jXPath の使い方だけ載せておきます:

XPath xpath = new Dom4jXPath("/foo:bar/@xlink:href");