Hitachi

uCosminexus Application Server XML Processor User Guide


5.5.4 Sample Program (SampleSAX.java)

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