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

How to use Multiple Predicates 

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 using multiple predicates in JXPath expression.

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/MultiplePredicatesTest.java 
Author  :  Sudhakar KV
Email  :  [email protected]
   
package com.bethecoder.tutorials.jxpath;

import java.util.Arrays;
import java.util.Iterator;

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 MultiplePredicatesTest {

  /**
   @param args
   */
  public static void main(String[] args) {
    BookStore bookStore = new BookStore(
      Arrays.asList(
        new Book("A-Book1"11.11new Author("A")),
        new Book("B-Book1"22.22new Author("B")),
        new Book("B-Book2"33.33new Author("B")),
        new Book("C-Book1"33.33new Author("C")),
        new Book("C-Book2"16.66new Author("C")),
        new Book("C-Book3"48.12new Author("C")),
        new Book("D-Book1"44.44new Author("D"))
      )
    );

    //Create JXPathContext with BookStore object as ROOT node
      JXPathContext context = JXPathContext.newContext(bookStore);
     
      //Get books names by Author C and price > 30
      Iterator<?> bookNamesByC = context.iterate("/books[price > 30]/author[name='C']/../title");
      while (bookNamesByC.hasNext()) {
        System.out.println(bookNamesByC.next());
      }
      
      //Get books by Author C and price < 40
      Iterator<?> bookByC = context.iterate("/books[price < 40]/author[name='C']/..");
      while (bookByC.hasNext()) {
        System.out.println(bookByC.next());
      }
  }

}
   

It gives the following output,
C-Book1
C-Book3

Book[C-Book2]
Book[C-Book1]



 
  


  
bl  br