SAX 파서는 XML 문서를 순차적으로 읽어, 시작 엘리먼트나 속성, 종료 엘리먼트, 텍스트 데이터 등을 만나면 이벤트가 발생하여 각 구성 요소를 처리하는 메소드가 호출된다.
중요한 이벤트로 문서의 시작과 끝, 엘리먼트의 시작과 끝, 텍스트 데이터가 있다.
아래는 SAX 파서를 이용한 샘플 프로그램이다.
Sample.xml
--------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<Sample>
<content id="1">content1</content>
<content id="2">content2</content>
</Sample>
SaxSampleParse.java
--------------------------------------------------------------------------------
package im.soli.lab;
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAXSampleParser extends DefaultHandler {
public SAXSampleParser() { }
// 문서의 시작
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("Start Document");
}
// 엘리먼트 시작
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("Start Element: " + qName);
// 엘리먼트 속성
for (int i = 0; i < attributes.getLength(); i++) {
System.out.println("Attribute: " + attributes.getQName(i) + "=" + attributes.getValue(i));
}
}
// 엘리먼트 끝
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("End Element: " + qName);
}
// 텍스트 데이터
public void characters(char ch[], int start, int length) throws SAXException {
System.out.println("Character: " + new String(ch, start, length));
}
// 문서의 끝
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("End Document");
}
public static void main(String[] args) {
try {
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
File xmlFile = new File("sample.xml");
parser.parse(xmlFile, new SAXSampleParser());
} catch (Exception e) {
e.printStackTrace();
}
}
}
댓글
댓글 쓰기