[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 문서를 참고하시기 바랍니다.