티스토리 뷰

반응형

 

 

Java에서 JDOM2 라이브러리 사용하여 XML 파싱하기

 

JDOM2 라이브러리란?

JDOM2는 Java에서 XML 문서를 파싱하고, 생성하고, 수정할 수 있는 라이브러리입니다.

XML을 객체 모델로 변환하여 쉽게 작업할 수 있도록 해주며, DOM이나 SAX 방식보다 간단하고 효율적으로 XML을 처리할 수 있습니다. 

 

JDOM2 라이브러리 설치하기

JDOM2 라이브러리를 사용하려면 먼저 프로젝트에 라이브러리를 추가해야 합니다.

Maven을 사용하는 경우, pom.xml 파일에 의존성을 추가하세요:

<dependency>
    <groupId>org.jdom</groupId>
    <artifactId>jdom2</artifactId>
    <version>2.0.6</version>
</dependency>

 

XML 파싱 예제 코드

다음은 JDOM2 라이브러리를 사용하여 XML을 파싱하는 예제 코드입니다.

이 예제에서는 XML 문자열을 파싱하여, 각 상품의 가격, 장소, 무게, 수량 등의 정보를 출력합니다.

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;

import java.io.StringReader;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        try {
            // XML 문자열
            String msg = "<product>" +
                    "<apple price="100" place="A상점" weight="1kg" quantity="5"/>" +
                    "<apple price="120" place="B상점" weight="1.2kg" quantity="15"/>" +
                    "<banana price="50" place="A상점" weight="2kg" quantity="50"/>" +
                    "</product>";

            // SAXBuilder로 XML 파싱
            SAXBuilder builder = new SAXBuilder();
            Document document = builder.build(new StringReader(msg));

            // 루트 엘리먼트 가져오기
            Element rootElement = document.getRootElement(); // <product> 엘리먼트

            // 모든 자식 엘리먼트 가져오기 (apple과 banana)
            List<Element> productElements = rootElement.getChildren();

            // 각각의 엘리먼트를 순회하며 출력
            for (Element product : productElements) {
                String name = product.getName();  // 엘리먼트 이름 (apple 또는 banana)
                String price = product.getAttributeValue("price");
                String place = product.getAttributeValue("place");
                String weight = product.getAttributeValue("weight");
                String quantity = product.getAttributeValue("quantity");

                System.out.println("상품: " + name);
                System.out.println("가격: " + price);
                System.out.println("장소: " + place);
                System.out.println("무게: " + weight);
                System.out.println("수량: " + quantity);
                System.out.println();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

특정 엘리먼트만 추출하기

위 코드에서는 getChildren() 메서드를 사용하여 모든 자식 엘리먼트를 가져왔습니다.

하지만 특정 엘리먼트만 필요하다면, getChildren(tagName) 메서드를 사용하여 특정 태그를 가진 자식 엘리먼트만 추출할 수 있습니다. 예를 들어, apple 태그만 가져오고 싶다면, 아래와 같이 수정할 수 있습니다:

// 특정 태그인 apple만 가져오기
List<Element> appleElements = rootElement.getChildren("apple");

// apple 태그만 순회하며 출력
for (Element apple : appleElements) {
    String price = apple.getAttributeValue("price");
    String place = apple.getAttributeValue("place");
    String weight = apple.getAttributeValue("weight");
    String quantity = apple.getAttributeValue("quantity");

    System.out.println("상품: apple");
    System.out.println("가격: " + price);
    System.out.println("장소: " + place);
    System.out.println("무게: " + weight);
    System.out.println("수량: " + quantity);
    System.out.println();
}

 

위 코드에서는 getChildren("apple")을 사용하여 apple 태그만 추출하고, 각 엘리먼트의 정보를 출력하는 방식입니다. 이 방법을 사용하면 불필요한 엘리먼트들을 제외하고, 원하는 데이터만 추출할 수 있습니다.

 

JDOM2의 장점

  • 간편한 사용법: XML을 객체 모델로 다룰 수 있어 직관적이고 간편하게 XML을 처리할 수 있습니다.
  • 유연한 XML 조작: XML을 쉽게 수정하고, 새로운 엘리먼트를 추가하거나 기존 엘리먼트를 수정할 수 있습니다.
  • DOM과 SAX의 장점 결합: DOM의 유연성과 SAX의 성능을 결합하여 효율적인 XML 처리가 가능합니다.