낭만 프로그래머

Java에서 Digester 를 사용하여 XML 파싱을 간단하게 사용하기 본문

Java/Common

Java에서 Digester 를 사용하여 XML 파싱을 간단하게 사용하기

조영래 2020. 9. 21. 16:01

Java에서는 기본적으로 XML을 파싱할 수 있는 코드를 제공합니다. 하지만 일일이 작업하는 것이 힘들기에 Digester 를 사용하여 간단히 XML을 파싱 해봅니다. 

1. XML 파일을 생성합니다

<bookstore>
	<name>우리서점</name>
    <books>
    	<book>
        	<title>재미난 낭만프로그래머</title>
        </book>
        <book>
        	<title>재미없는 낭만프로그래머</title>
        </book>
    </books>
</bookstore>

 

2. 객체화 시킬 BookStore, Book 클래스를 작성합니다

/** Book Store **/
public class BookStore {

    private String name;
    private List<Book> bookList = new ArrayList<Book>();
    
    public String getName() {
    	return this.name;
    }
    
    public void setName(String name) {
    	this.name = name;
    }
    
    public List<Book> getBookList() {
    	this.bookList;
    }
    
    public void setBookList(List<Book> bookList) {
    	this.bookList = bookList;
    }
    
    public void addBook(Book book) {
    	this.bookList.add(book);
    }
}
/** Book **/
public class Book {

    private String title;
    
    public String getTitle() {
    	return this.title;
    }
    
    public void setTitle(String title) {
    	this.title = title;
    }
}

 

3. 실제 사용
    - 클래스인 경우는 ObjectCreate, 속성인 경우에는 CallMethod를 사용하며 Book과 같이 리스트인 경우에는 SetNext를 해야 합니다. 참조할 메소드를 일일이 다 넣어 주네요 ^^*

String xml = "<bookstore>...</bookstore>";
StringReader sr = null;
		
try {
	sr = new StringReader(xml);
	
	Digester digester = new Digester();
	digester.setValidating( false );
	digester.addObjectCreate("bookstore", BookStore.class );
	digester.addCallMethod("bookstore/name","setName",0);
	digester.addObjectCreate("bookstore/books/book", Book.class);
	digester.addCallMethod("rbookstore/books/book/title","setTitle",0);
	digester.addSetNext( "bookstore/books/book", "addBook", "com.company.Book" );
	BookStore bookstore = digester.parse(sr);
}
catch(Exception e) {
	e.printStackTrace();
}
finally {
	if(sr != null) {
		sr.close();
	}
}