[java] 자바에서 SAX를 사용하여 XML 파싱
XML은 데이터를 저장하는 데 사용되는 표준 형식이지만, 이 데이터를 읽고 처리하는 것은 어렵지 않을 수 있습니다. 자바에서는 SAX(Simple API for XML) 파서를 사용하여 XML을 파싱할 수 있습니다. SAX는 이벤트 기반의 파서로, XML 문서를 한 줄씩 읽어가면서 시작 태그, 속성, 텍스트 등 각각의 요소에 대한 이벤트를 생성합니다.
SAX 파서 설정
SAX 파서를 설정하기 위해서는 다음과 같이 코드를 작성합니다.
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.File;
public class XmlHandler extends DefaultHandler {
// XML 요소에 대한 이벤트를 처리하는 메소드를 구현
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// 시작 태그를 읽었을 때의 동작을 구현
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// 텍스트를 읽었을 때의 동작을 구현
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// 종료 태그를 읽었을 때의 동작을 구현
}
public static void main(String[] args) {
try {
File inputFile = new File("input.xml");
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
XmlHandler handler = new XmlHandler();
saxParser.parse(inputFile, handler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
SAX 파서로 XML 파싱하기
위와 같이 SAX 파서를 설정하고 나면 startElement
, characters
, endElement
메소드를 구현하여 XML 요소를 처리할 수 있습니다.
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("book")) {
// book 요소를 처리하는 코드 작성
String id = attributes.getValue("id");
// id 속성 값 사용
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// 텍스트를 읽었을 때의 동작을 구현
System.out.println(new String(ch, start, length));
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equalsIgnoreCase("title")) {
// title 요소를 처리하는 코드 작성
}
}
마치며
SAX를 사용하여 XML을 파싱하면, 메모리 효율적으로 대용량의 XML을 처리할 수 있고, 다른 스트림 기반의 작업과 쉽게 통합할 수 있습니다. 이를 통해 XML 데이터를 효율적으로 읽고 처리할 수 있게 됩니다.
자세한 내용은 Oracle Java API 문서를 참고하시기 바랍니다.