tl  tr
  Home | Tutorials | Articles | Videos | Products | Tools | Search
Interviews | Open Source | Tag Cloud | Follow Us | Bookmark | Contact   
 Tools and Libs > JXPath > How to Access Nested Properties

How to Access Nested Properties 

JXPath is a java library for Object Graph Navigation using the XPath syntax. This requires the libraries commons-jxpath-1.3.jar, commons-beanutils.jar and commons-logging.jar to be in classpath. The following example shows accessing nested properties in JXPath.

File Name  :  
com/bethecoder/tutorials/jxpath/common/Book.java 
   
package com.bethecoder.tutorials.jxpath.common;

public class Book {
  
  private String title;
  private double price;
  private Author author;

  public Book(String title, double price, Author author) {
    super();
    this.title = title;
    this.price = price;
    this.author = author;
  }

  public String getTitle() {
    return title;
  }
  public void setTitle(String title) {
    this.title = title;
  }
  public double getPrice() {
    return price;
  }
  public void setPrice(double price) {
    this.price = price;
  }
  
  public String toString() {
    return "Book[" + title + "]";
  }

  public Author getAuthor() {
    return author;
  }

  public void setAuthor(Author author) {
    this.author = author;
  }
}
   

File Name  :  
com/bethecoder/tutorials/jxpath/common/BookStore.java 
   
package com.bethecoder.tutorials.jxpath.common;

import java.util.List;

public class BookStore {
  
  private List<Book> books;
  
  public BookStore(List<Book> books) {
    super();
    this.books = books;
  }

  public List<Book> getBooks() {
    return books;
  }
  public void setBooks(List<Book> books) {
    this.books = books;
  }
}
   

File Name  :  
com/bethecoder/tutorials/jxpath/NestedPropertiesTest.java 
Author  :  Sudhakar KV
Email  :  [email protected]
   
package com.bethecoder.tutorials.jxpath;

import java.util.Arrays;

import org.apache.commons.jxpath.JXPathContext;

import com.bethecoder.tutorials.jxpath.common.Author;
import com.bethecoder.tutorials.jxpath.common.Book;
import com.bethecoder.tutorials.jxpath.common.BookStore;

public class NestedPropertiesTest {

  /**
   @param args
   */
  public static void main(String[] args) {
    BookStore bookStore = new BookStore(
      Arrays.asList(
        new Book("A1"11.11new Author("X1")),
        new Book("B2"22.22new Author("X2")),
        new Book("C3"33.33new Author("X3")),
        new Book("D4"44.44new Author("X4"))
      )
    );

    //Create JXPathContext with BookStore instance as ROOT node
      JXPathContext context = JXPathContext.newContext(bookStore);
      
      //Get the book with title 'B2' 
      System.out.println(context.getValue("/books[@title='B2']"));
      
      //Get the price of book with title 'B2' 
      System.out.println(context.getValue("/books[@title='B2']/price"));
      
      //Get the author name of book titled 'B2'
      System.out.println(context.getValue("/books[@title='B2']/author/name"));
      
      //Get the author email of book titled 'B2'
      System.out.println(context.getValue("/books[@title='B2']/author/email"));
  }

}
   

It gives the following output,
Book[B2]
22.22
X2
[email protected]



 
  


  
bl  br