package exam.andexam;

import java.io.*;

import javax.xml.parsers.*;

import org.w3c.dom.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;

public class C21_SaxParser extends Activity {
 TextView mResult;
 
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.c21_domparser);

  mResult = (TextView)findViewById(R.id.result);
 }

 public void mOnClick(View v) {
  String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
  "<order><item>Mouse</item></order>";

  try {
   SAXParserFactory factory = SAXParserFactory.newInstance();
   SAXParser parser = factory.newSAXParser();
   XMLReader reader = parser.getXMLReader();
   SaxHandler handler = new SaxHandler();
   reader.setContentHandler(handler);
   InputStream istream = new ByteArrayInputStream(xml.getBytes("utf-8"));
   reader.parse(new InputSource(istream));
   mResult.setText("주문 항목 : " + handler.item);
  }
  catch (Exception e) {
   Toast.makeText(v.getContext(), e.getMessage(), 0).show();
  }
 }
 
 class SaxHandler extends DefaultHandler {
  boolean initem = false;
  StringBuilder item = new StringBuilder();

  public void startDocument () {}
  public void endDocument() {}
  
  public void startElement(String uri, String localName, String qName, Attributes atts) {
   if (localName.equals("item")) {
    initem = true;
   }
  }
  
  public void endElement(String uri, String localName, String qName) {}

  public void characters(char[] chars, int start, int length) {
   if (initem) {
    item.append(chars, start, length);
    initem = false;
   }
  }
 };
}

 

SAX 파서 예제로 공부중인데요
아래의 SaxHandler 클래스가 좀 이해가 안되서요
public void startDocument () {}
public void endDocument() {}
public void endElement(String uri, String localName, String qName) {}
위 3개의 메소드에 대한 내용은 아무것도 없는데
왜 썼는지 이해가 안되요;
3개의 메소드를 모두 주석처리하고 실행해도 주문항목 값은 제대로 가져오는데요..
왜 썼는지 이해가 안되요

DefaultHandler 확장형으로 클래스를 생성하면 만들어지는 메소드들인가요??
그리고 startElement, characters 메소드는 안드로이드가 필요할 때마다 호출하는것인지 알고싶어요....

 

 


그리고 SaxHandler 클래스를 꼭 생성하지 않고 바로 노드값 가져와도 될텐데
여기서는 왜 굳이 핸들러를 썼을까요? 책에는 별다른 설명이 없어서 ㅠㅠ 답변 부탁드립니다.