XML Java

import java.io.File;
import java.util.ArrayList;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
public class SAXSample {
  public static void main(String[] args) throws Exception {
    File file = new File("book.xml");
    SAXParserFactory factory = SAXParserFactory.newInstance();
    MyHandler handler = new MyHandler();
    SAXParser saxParser = factory.newSAXParser();
    saxParser.parse(file, handler);
    SAXBooks books = handler.getBooks();
    for (int i = 0; i < books.getBookSize(); i++) {
      SAXBook book = books.getBook(i);
      System.out.println(book);
    }
  }
}
class MyHandler extends DefaultHandler {
  private SAXBooks books;
  private boolean readingAuthor;
  private boolean readingTitle;
  private boolean readingPrice;
  public SAXBooks getBooks() {
    return this.books;
  }
  public void startElement(String uri, String localName, String qName, Attributes attributes) {
    if (qName.equalsIgnoreCase("books")) {
      books = new SAXBooks();
    } else if (qName.equalsIgnoreCase("book")) {
      SAXBook book = new SAXBook();
      for (int i = 0; i < attributes.getLength(); i++) {
        if (attributes.getQName(i).equalsIgnoreCase("category")) {
          book.setCategory(attributes.getValue(i));
        }
      }
      books.addBook(book);
    } else if (qName.equalsIgnoreCase("author")) {
      this.readingAuthor = true;
    } else if (qName.equalsIgnoreCase("title")) {
      this.readingTitle = true;
    } else if (qName.equalsIgnoreCase("price")) {
      this.readingPrice = true;
    } else {
      System.out.println("Unknown element: " + qName);
    }
  }
  public void startDocument() {
  }
  public void endDocument() {
  }
  public void characters(char[] ch, int start, int length) {
    String chars = new String(ch, start, length).trim();
    if (chars.length() == 0) {
      return;
    }
    SAXBook book = books.getLastBook();
    if (readingAuthor) {
      book.setAuthor(chars);
    } else if (readingTitle) {
      book.setTitle(chars);
    } else if (readingPrice) {
      book.setPrice(Float.parseFloat(chars));
    }
  }
  public void endElement(String uri, String localName, String qName) {
    if (qName.equalsIgnoreCase("author")) {
      this.readingAuthor = false;
    } else if (qName.equalsIgnoreCase("title")) {
      this.readingTitle = false;
    } else if (qName.equalsIgnoreCase("price")) {
      this.readingPrice = false;
    }
  }
}
class SAXBook {
  private String title;
  private String author;
  private String category;
  private float price;
  public SAXBook() {
  }
  public SAXBook(String title, String author, String category, float price) {
    this.title = title;
    this.author = author;
    this.category = category;
    this.price = price;
  }
  public String getTitle() {
    return this.title;
  }
  public void setTitle(String title) {
    this.title = title;
  }
  public String getAuthor() {
    return this.author;
  }
  public void setAuthor(String author) {
    this.author = author;
  }
  public String getCategory() {
    return this.category;
  }
  public void setCategory(String category) {
    this.category = category;
  }
  public float getPrice() {
    return this.price;
  }
  public void setPrice(float price) {
    this.price = price;
  }
  public String toString() {
    return "Book: " + title + ", " + category + ", " + author + ", " + price;
  }
}
class SAXBooks {
  private ArrayList bookList = new ArrayList();
  public SAXBooks() {
  }
  public void addBook(SAXBook book) {
    this.bookList.add(book);
  }
  public SAXBook getBook(int index) {
    if (index >= bookList.size()) {
      return null;
    }
    return (SAXBook) bookList.get(index);
  }
  public SAXBook getLastBook() {
    return this.getBook(this.getBookSize() - 1);
  }
  public int getBookSize() {
    return bookList.size();
  }
}
 
   
    title 1 
    Tim Lahaye 
    14.95 
   
   
    title 2 
    Tim Lahaye 
    14.95