[java] XML 파일에서 요소 유형에 따라 처리하기

XML 파일을 처리하다 보면 특정 요소 유형에 따라 다른 작업을 수행해야 하는 경우가 있습니다. Java에서는 DOM(Document Object Model) 또는 SAX(Simple API for XML)와 같은 라이브러리를 사용하여 XML을 파싱하고 이러한 작업을 수행할 수 있습니다.

DOM을 사용한 처리

DOM을 사용하면 XML 문서를 트리 구조로 메모리에 로드하고 각 요소에 대해 직접 액세스할 수 있습니다. 요소 유형에 따라 다른 작업을 수행하려면 getElementsByTagName 메서드를 사용하여 해당 요소를 선택하고 작업을 수행하면 됩니다.

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;

public class DOMExample {
    public static void main(String[] args) {
        try {
            File xmlFile = new File("file.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(xmlFile);

            NodeList elements = doc.getElementsByTagName("elementName");
            for (int i = 0; i < elements.getLength(); i++) {
                Element element = (Element) elements.item(i);
                // 요소 유형에 따라 처리
                if (element.getNodeName().equals("elementType1")) {
                    // 처리 방법 1
                } else if (element.getNodeName().equals("elementType2")) {
                    // 처리 방법 2
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

SAX를 사용한 처리

SAX를 사용하면 XML을 순차적으로 읽어들이며, 각 요소를 처리하는 콜백 메서드를 구현할 수 있습니다. 따라서 요소를 읽을 때마다 해당 요소의 유형에 따라 처리할 수 있습니다.

import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

public class SAXExample {
    public static void main(String[] args) {
        try {
            XMLReader xmlReader = XMLReaderFactory.createXMLReader();
            xmlReader.setContentHandler(new DefaultHandler() {
                public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
                    // 요소 유형에 따라 처리
                    if (qName.equals("elementType1")) {
                        // 처리 방법 1
                    } else if (qName.equals("elementType2")) {
                        // 처리 방법 2
                    }
                }
            });
            xmlReader.parse("file.xml");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

각 방법은 장단점이 있으므로 상황에 맞게 적절한 방법을 선택하여 요소 유형에 따라 XML을 처리할 수 있습니다.

참고 자료