The following shows the sample program:
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.xml.sax.SAXException;
import java.io.*;
public class SampleSAX{
public static final void main(String[] args){
try{
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
String xml = "SampleSAX.xml";
DefaultHandler handler = new EventHandler();
parser.parse(xml, handler);
}catch(ParserConfigurationException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}catch(SAXException e){
e.printStackTrace();
}
}
}
//calculate an amount of money in total and output it
class EventHandler extends DefaultHandler{
int tvPrice; //Television unit price
int radioPrice; //Radio unit price
int videoPrice; //Video unit price
int tvNum; //Television amount
int radioNum; //Radio amount
int videoNum; //Video amount
boolean tvFlag; //Television flag
boolean radioFlag; //Radio flag
boolean videoFlag; //Video flag
boolean tankaFlag; //Unit price flag
boolean volFlag; //Amount flag
boolean nameFlag; //Brand Name flag
String str; //Character string of element contents
StringBuffer buffer; //buffer for character string connections of element contents
//start notice event of XML
public void startDocument(){
tvPrice = 0;
radioPrice = 0;
videoPrice = 0;
tvNum = 0;
radioNum = 0;
videoNum = 0;
tvFlag = false;
radioFlag = false;
videoFlag = false;
tankaFlag = false;
volFlag = false;
nameFlag = false;
}
//end notice event of XML
public void endDocument(){
int sum = tvNum * tvPrice + radioNum * radioPrice +
videoNum * videoPrice;
System.out.println(sum + " yen in total.");
}
//element start (a start of a tag) notice event
public void startElement(String nameSpace, String localName,
String modName, Attributes attr){
buffer = new StringBuffer();
if(modName.equals("Unit_Price")){
tankaFlag = true;
}
if(modName.equals("Amount")){
volFlag = true;
}
if(modName.equals("Brand_Name")){
nameFlag = true;
}
}
//element end (the end of a tag) notice event
public void endElement(String nameSpace, String localName,
String modName){
str = buffer.toString();
if(nameFlag == true){
if(str.equals("Television")){
tvFlag = true;
}
if(str.equals("Radio")){
radioFlag = true;
}
if(str.equals("Video")){
videoFlag = true;
}
}else if(tvFlag == true){
if(tankaFlag == true){
//set unit price of television
tvPrice = Integer.parseInt(str);
}else if(volFlag == true){
//set amount of television
tvNum = Integer.parseInt(str);
}
}else if(radioFlag == true){
if(tankaFlag == true){
//set unit price of radio
radioPrice = Integer.parseInt(str);
}else if(volFlag == true){
//set amount of radio
radioNum = Integer.parseInt(str);
}
}else if(videoFlag == true){
if(tankaFlag == true){
//set unit price of video
videoPrice = Integer.parseInt(str);
}else if(volFlag == true){
//set amount of video
videoNum = Integer.parseInt(str);
}
}
if(modName.equals("Unit_Price")){
tankaFlag = false;
}
if(modName.equals("Amount")){
volFlag = false;
}
if(modName.equals("Brand_Name")){
nameFlag = false;
}
if(modName.equals("Merchandise")){
tvFlag = false;
radioFlag = false;
videoFlag = false;
}
}
//notice of character string event
public void characters(char[] ch, int start, int length){
buffer.append(ch, start, length);
}
}