32.4. XPath ビルダー

概要

org.apache.camel.builder.xml.XPathBuilder クラスを使用すると、エクスチェンジとは独立して XPath 式を評価することができます。つまり、任意のソースからの XML フラグメントがあれば、XPathBuilder を使用して XML フラグメントの XPath 式を評価することができます。

式のマッチング

matches() メソッドを使用して、指定された XPath 式に一致する XML ノードが 1 つ以上見つかるかどうかをチェックします。XPathBuilder を使用した XPath 式のマッチングの基本的な構文は以下のとおりです。

boolean matches = XPathBuilder
                    .xpath("Expression")
                    .matches(CamelContext, "XMLString");

ここで、指定された式である Expression が XML フラグメントである XMLString に対して評価され、式に一致するノードが少なくとも 1 つ見つかった場合に結果は true になります。たとえば、以下の例では XPath 式が xyz 属性に一致するものを見つけたため、true が返されます。

boolean matches = XPathBuilder
                    .xpath("/foo/bar/@xyz")
                    .matches(getContext(), "<foo><bar xyz='cheese'/></foo>"));

式の評価

evaluate() メソッドを使用して、指定された XPath 式と一致する最初のノードの内容を返します。XPathBuilder を使用して XPath 式を評価するための基本的な構文は以下のとおりです。

String nodeValue = XPathBuilder
                    .xpath("Expression")
                    .evaluate(CamelContext, "XMLString");

また、evaluate() に第 2 引数として必要な型を渡すことで、結果の型を指定することもできます。

String name = XPathBuilder
                   .xpath("foo/bar")
                   .evaluate(context, "<foo><bar>cheese</bar></foo>", String.class);
Integer number = XPathBuilder
                   .xpath("foo/bar")
                   .evaluate(context, "<foo><bar>123</bar></foo>", Integer.class);
Boolean bool = XPathBuilder
                   .xpath("foo/bar")
                   .evaluate(context, "<foo><bar>true</bar></foo>", Boolean.class);