SAXSample.java Source code

Java tutorial

Introduction

Here is the source code for SAXSample.java

Source

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<SAXBook> bookList = new ArrayList<SAXBook>();

    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();
    }
}

<books><book category="fiction"> 
  <title>title 1</title> 
  <author>Tim Lahaye</author><price>14.95</price></book><book category="science fiction"> 
  <title>title 2</title> 
  <author>Tim Lahaye</author><price>14.95</price></book>

</books>