JDOM은 자바로 XML 포맷을 처리할 수 있도록 도와주는 오픈소스 라이브러리이다. JDOM을 사용하는 것은 상당히 간단하고, 또 예제 프로그램도 상당수 찾아볼 수 있기 때문에 XML 파일을 생성하거나 파싱하는 등의 작업에 유용하게 사용할 수 있다.
설치
- jdom-1.0.zip 파일 받아서 압축 푼다.(http://www.jdom.org/dist/binary/)
- C에 앞축을 풀었다면 JAVA_HOME이 java의 폴더로 잘 잡혀있는지 본다. (C:\program files\java\jdk1.6.0_01)
- 압축을 푼 jdom 폴더안에(혹시나 이름은 jdom으로 바꿨다. 폴더이름) build파일이 두가지 .bat, .xml이 다 있는지 확인한다.
- classpath를 등록해준다. 내컴퓨터>등록정보>고급>환경변수를 클릭한다.
- classpath가 없다면 새로 만들기로 만들고 있다면 편집을 누른다.
- 그냥 뒤에다가 아래의 것을 붙인다.
- .;C:\jdom\build\classes;C:\jdom\lib\xerces.jar;C:\jdom\build\jdom.jar;C:\jdom\lib\ant.jar;C:\jdom\lib\jaxen-core.jar;C:\jdom\lib\jaxen-jdom.jar;C:\jdom\lib\saxpath.jar;C:\jdom\lib\xml-apis.jar;C:\program files\java\jdk1.6.0_01\lib\tools.jar;
- 이제 실행해본다. 도스창 하나 띄우고서리 jdom폴더로 이동한다.
- build.bat를 친다.
- build successful이라고 나오면 성공. jdom.jar가 생성된다.
- build package javadoc samples compile를 입력해서 제대로 잘 설치되었는지 확인한다.
eclipse에서 JDOM설치
- jdom을 참조할 프로젝트 오른쪽 클릭 후 Build Path > Add External Archives 를 클릭한다
- jdom\build\jdom.jar 파일을 선택한다.
Official
- JDOM 프로젝트 공식 사이트 : http://www.jdom.org/
- JavaDoc : http://www.jdom.org/docs/apidocs/index.html
- Docs : http://www.jdom.org/downloads/docs.html
JDOM Project's Mission
We want to provide a solution for using XML from Java that is as simple as Java itself.
There is no compelling reason for a Java API to manipulate XML to be complex, tricky, unintuitive, or a pain in the neck. JDOMTM is both Java-centric and Java-optimized. It behaves like Java, it uses Java collections, it is completely natural API for current Java developers, and it provides a low-cost entry point for using XML.
JDOM은 Simple API for XML (SAX)와 Document Object Model (DOM)와 함께 동작한다. 그러나 JDOM은 이러한 위의 API보다 간단하게 추상되어있다. JDOM은 DOM과 SAX 소스들을 읽을 수 있고, 이러한 형식으로 출력할 수 있다. 이러한 기능들은 JDOM이 SAX나 DOM과 상호 동작할 수 있도록 한다.
JDOM은 오픈 소스 API로 디자인되어 XML문서를 자바 개발자가 직관적으로 표현할 수 있도록 도와준다. 이름에 나와있는것처럼 JDOM은 자바에 최적화 되어 있다. 자바처럼 동작하며 자바 컬렉션을 사용하고, 저렴한 비용으로 XML을 이용할 수 있다. JDOM 사용자는 XML에 대한 전문적인 기술 없이 사용할 수 있다.
JDOM은 아파치와 같이 오픈소스 라이센스를 가진다. 이 라이센스는 최소한의 제한된 소프트웨어 라이센스로, 개발자들이 JDOM을 제품 생산시 사용하고, 프로그램을 배포할 때 오픈소스 정책을 따를 필요가 없다. 이 라이센스 모델은 아파치 프로젝트에서 따왔으며 아파치 서버에 사용되었다. In addition to making the software free, being open source enables the API to take contributions from some of the best Java and XML minds in the industry and to adapt quickly to new standards as they evolve.
JDOM의 철학
무엇보다도 첫 번째로 JDOM API는 Java Programmer에 의해서 제작되었다. XML API가 언어를 초월하기 위해 만들어지고 있을 동안(똑같은 API가 자바와 C++, 심지어 Javascript조차도 지원되었다) JDOM은 자바의 오버로딩이나 컬렉션(Collections APIs)같은 기능들을 반영했다.
간단하게 하기 위해 JDOM API는 프로그래머가 기대하는대로 표현하도록 구현되었다. 다음 문장에서 element의 문장을 자바로 가져오려면 어떻게 표현할 수 있을까?
- <element>This is my text content</element>
다른 API에서는 자식 노드를 통해서만 접근이 가능하다. 기술적으로는 정확하지만 내용에 접근하기 위해서는 다음과 같이 입력해야 한다.
- String content = element.getFirstChild().getValue();
그러나 JDOM에서는 바로 접근이 가능하다
- String text = element.getText();
Wherever possible, JDOM makes the programmer's job easier. The rule of thumb is that JDOM should help solve 80 percent or more of Java/XML problems with 20 percent or less of the traditional effort. That does not mean that JDOM conforms to only 80 percent of the XML specification. (In fact, we expect that JDOM will be fully compliant before the 1.0 final release.) What that rule of thumb does mean is that just because something could be added to the API doesn't mean it will. The API should remain sleek.
JDOM의 두 번째 철학은 가볍고 빠르게 동작해야 하는 것이다. 로딩과 문서 생성이 빨라야하고 메모리 요구가 낮아야 한다. JDOM의 디자인은 이를 따른다. For example, even the early, untuned implementation has operated more quickly than DOM and roughly on par with SAX, even though it has many more features than SAX.
Do you need JDOM?
So, do you need JDOM? It's a good question. There are existing standards already, so why invent another one? The answer is that JDOM solves a problem that the existing standards do not.
DOM은 문서의 트리 구조를 모두 메모리에 보관한다. XML 작업을 수행하도록 디자인된 거대한 API를 가지고있다. 또한 가은 API를 다양한 언어에서 가져야 한다.이러한 강제성 때문에 DOM은 오버로딩이나 자바의 Object 타입, set/get 함수와 같은 일반적인 자바의 특성을 생각하는 자바의 개발자들에게는 자연스럽게 다가오지는 않는다. DOM은 또한 많은 메모리 공간과 처리량이 요구되며 가벼운 웹 어플리케이션이나 프로그램에는 어울리지 않는다.
SAX는 메모리에 트리 문서를 저장하고 있지 않는다. 대신에 순차적인 이벤트에 따라 문서를 표현한다. 예를들어 시작태그와 끝나는 태그를 만나면 만날 때마다 이를 알려준다. 이러한 접근은 가벼운 API와 빠른 속도를 낼 수 있지만 이벤트 방식의 문서는 직관적인 오늘날의 서버측 방식이나, 객체지향 자바 개발자들에게는 어울리지 않는다. SAX는 또한 문서 수정이 제공되지 않으며 랜덤 접근도 할 수 없다.
JDOM은 DOM과 SAX의 장접을 통합하려고 하였다. 적은 API 설계와 빠르고 적은 메모리를 사용하도록 설계됭었다. JDOM은 또한 랜덤 접근을 제공하지만 놀랍게도 모든 문서가 메모리에 있을 필요가 없다. API는 필요할때만 정보를 읽어오도록 한다. 게다가 JDOM은 생성자와 set 함수를 이용해 문서 수정이 쉽다.
예제
import java.io.FileWriter;
import java.io.IOException;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;
public class JDOM {
public static void main(String[] args) throws IOException{
// 존재 하지 않는 XML문서를 만들기 위해 제일 먼저 해야 할 일은
// Jdom.org.Document객체를 만드는 것이다. 물론 새로 만드는 것이기 때문에
// 비어 있는 Document객체를 만드는 것이다
Document doc = new Document(); //비어있는 xml에 꼭 루트엘리먼트 1개는 있어야 한다.
//위의 비어있는 Xml문서(Document)객체를 다음과 같이 생성하자!
// <total>
// <emp>
// <name>홍길동</name>
// <phone>011-222</phone>
// </emp>
// </total> ==엘리먼트 총 4개
Element root = new Element("total");
Element emp = new Element("emp");
Element name = new Element("name");
Element phone = new Element("phone");
//각 엘리먼트들 배치 작업 (엘리먼트에 자식 요소를 추가할 떄는 위의 주석대로 배치를 해줘야 한다)
//addContent()메서드를 이용한다.
emp.addContent(name);
emp.addContent(phone);
//emp요소는 root에 추가되어야 한다.
root.addContent(emp);
// name과 phone에 Text요소를 적용해야 한다.
name.setText("홍길동");
phone.setText("011-22222");
//마지막으로 Document에 root를 설정한다.
doc.setRootElement(root);
//파일로 저장하기 위해서 XMLOutputter 객체가 필요하다
XMLOutputter xout = new XMLOutputter();
xout.output(doc, new FileWriter("c:/emp.xml"));
}
}
'[Developer] > Java' 카테고리의 다른 글
Decorator Pattern (0) | 2010.01.13 |
---|---|
조금은 헷갈릴 수 있는 static과 final에 관한 진실 (0) | 2009.11.12 |
Jetty 6.x 설치하기 / 실행하기 (0) | 2009.09.29 |
CriticalSection 찾아 돌아다니다가.. (0) | 2009.09.02 |
ArrayList 예제 - Generic 사용 - (0) | 2009.08.28 |
댓글