'parse'에 해당되는 글 1건

  1. 2009.07.08 SAX...!
XML2009. 7. 8. 21:32

오늘은 SAX에 대해서 배웠다.
SAX란 XML의 내용을 지가 알아서 Parse해준다 그정도??
XML의 내용을 SAX에 정의된 규칙대로 나눠 준다.
HTML부터 오늘의 XML까지 완전 그로기 상태다.
자 그럼 SAX를 설명??해보겠다.


//BoardHandler는 DefaultHandler를 상속받게된다.
//구현되는 메소드에는 startElement, characters, endElement가 있다.
public class BoardHandler extends DefaultHandler {
 private final String BOARDS = "boards";
 private final String BOARD = "board";
 private final String TITLE = "title";
 private final String CONTENT = "content";
 private final String REGIST_DATE = "registDate";
 private final String READ_COUNT = "readCount"; //각각의 변수에 Element의 이름과 같은 값을 넣어준다.
 private String currentElement = "";   //현재의 Element를 담을 변수

 private List<Board> boardList = null;   //Board형으로 데이터를 담으면 그걸 차례대로 넣을 List
 private Board board = null;   //Board형으로 데이터를 가져와 담을 Board객체
//시작태그를 만나게 되면 실행되는 메소드.
//시작태그의 이름을 가져온다.
//시작태그의 이름에 맞는 행동들을 써준다.
//태그의 이름은 localName이나 qName으로 넘어온다.
public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
 throws SAXException {
  if(BOARDS.equals(qName)){
   boardList = new ArrayList<Board>();
  }
  if(BOARD.equals(qName)){
   board = new Board();
  }
  currentElement = qName;
 }

//태그이외의 문자를 처리해주는 메소드
//실질적인 데이터를 추출해내는 부분이다.
//알아서 파싱한 문자열을 char형태로 받아 시작 인덱스와 길이만큼 파싱을해 String객체에 넣어준다
//각각의 조건에 맞게 Board안에 넣어준다.

public void characters(char[] ch, int start, int length)
 throws SAXException {
  String str = new String(ch, start, length);
  if(TITLE.equals(currentElement)){
   board.setTitle(str);
  }
  if(CONTENT.equals(currentElement)){
   board.setContent(str);
  }
  if(REGIST_DATE.equals(currentElement)){
   board.setRegistDate(str);
  }
  if(READ_COUNT.equals(currentElement)){
   board.setReadCount(str);
  }
 }

//종료 태그를 만나게 되면 실행되는 메소드
//종료태그를 만날때마다 차곡차고넣어둔다...List에..
//언제까지?? 종료태그의 끝까지...
//그후 XML에서 뽑아온 데이터를 출력해주는 부분까지.
public void endElement(String namespaceURI, String localName, String qName)
 throws SAXException {
  if(BOARD.equals(qName)){
   boardList.add(board);
  }
  
  for(int i = 0;i < boardList.size();i++){
   Board board = boardList.get(i);
   System.out.println(board.getTitle());
   System.out.println(board.getContent());
   System.out.println(board.getRegistDate());
   System.out.println(board.getReadCount());
  }
 }
}

수업시간 내내.. 그리고 저녁먹고나서까지 이해가 안됐던 SAX..

뭐든 쉽게 쉽게 생각하자...어려운거란 없다...

어렵다 생각하면 끝까지 어려운거고 쉽다고 생각하면 쉬운거다.

쉽다...쉽다...쉽다...쉽다...쩝...그게말처럼 되지않는게 현실...-_-;;ㅋ

'XML' 카테고리의 다른 글

XML and DTD...!  (0) 2009.07.07
Posted by Z700zZz