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 처리가 가능합니다.