The org.apache.camel.builder.xml.XPathBuilder
class enables you to
evaluate XPath expressions independently of an exchange. That is, if you have an XML
fragment from any source, you can use XPathBuilder
to evaluate an XPath
expression on the XML fragment.
Use the matches()
method to check whether one or more XML nodes can
be found that match the given XPath expression. The basic syntax for matching an
XPath expression using XPathBuilder
is as follows:
boolean matches = XPathBuilder .xpath("Expression
") .matches(CamelContext, "XMLString
");
Where the given expression, Expression
, is evaluated
against the XML fragment, XMLString
, and the result is
true, if at least one node is found that matches the expression. For example, the
following example returns true
, because the XPath expression finds a
match in the xyz
attribute.
boolean matches = XPathBuilder .xpath("/foo/bar/@xyz") .matches(getContext(), "<foo><bar xyz='cheese'/></foo>"));
Use the evaluate()
method to return the contents of the first node
that matches the given XPath expression. The basic syntax for evaluating an XPath
expression using XPathBuilder
is as follows:
String nodeValue = XPathBuilder .xpath("Expression
") .evaluate(CamelContext, "XMLString
");
You can also specify the result type by passing the required type as the second
argument to evaluate()
—for example:
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);
A prerequisite for using the Saxon parser is that you add a dependency on the
camel-saxon
artifact (either adding this dependency to your Maven
POM, if you use Maven, or adding the camel-saxon-2.8.0-fuse-00-08.jar
file
to your classpath, otherwise).
The simplest way to enable the Saxon parser is to call the saxon()
fluent builder method. For example, you could invoke the Saxon parser as shown in
the following example:
// Java // create a builder to evaluate the xpath using saxon XPathBuilder builder = XPathBuilder.xpath("tokenize(/foo/bar, '_')[2]").saxon(); // evaluate as a String result String result = builder.evaluate(context, "<foo><bar>abc_def_ghi</bar></foo>");