12.2. Querying an Object Graph with XPath
Problem
You need to retrieve nested bean properties using an XPath expression. You need to perform an XPath query on an object graph.
Solution
Use Commons JXPath to evaluate an XPath expression against an object
graph. JXPath treats nested bean properties as if they were nested
elements in an XML document; using JXPath, the expression
a/b/c
is the equivalent of
getA( ).getB( ).getC( )
. Create a
JXPathContext
by passing an object to
JXPathContext.newContext( )
, and retrieve the
value of a nested property by passing an XPath expression to the
getValue( )
method on
JXPathContext
. The following example creates an
object graph rooted on a League
object and
retrieves nested properties using two XPath expressions:
import org.apache.commons.jxpath.JXPathContext;
// Create an Object graph
League league = new League( );
Team team = new Team( );
league.getTeams( ).add( team );
team.setCoach( new Person( "Coach Bob" ) );
team.getPlayers( ).add( new Person( "Player Charlie" );
team.getPlayers( ).add( new Person( "Player Ted" );
team.getPlayers( ).add( new Person( "Player Bart" );
Team team2 = new Team( );
league.getTeams( ).add( team2 );
team2.setCoach( new Person( "Coach Susan" );
team2.getPlayers( ).add( new Person( "Player Jim" );
// Query for the coach of a specific player.
JXPathContext context = JXPathContext.newContext( league );
System.out.println( "** Retrieve the first name of Ted's coach");
String xpath = "teams/players[firstName = 'Player ...
Get Jakarta Commons Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.