dom4j를 이용한 xml파싱 1/4 # 서두 XML을 처리하는 공통모듈을 개발해야하는 일이 생겼다. 전에 간단한 것을 digester로 처리해본적은 있지만, 그것도 제공하는 형식을 조금 변형한것이었고, XML을 자세히 알지도 못했다. 더욱 괴로운것은 JDK1.3으로 낮다는것이다. XML은 JDK1.4부터 정식지원됐다. 그리고, 외부패키지들이 XML 라이브러리를 사용하고 있는데, 이들이 버전이 베타버전 정도였다-_- XML에서 데이터를 추출하는데, 가장 문제는 무엇일까? 그건 XML이 계층구조(hierarchy)라는 것이다. 하부에 중복되는 노드가 존재하고, 그 하부에 또 노드가 존재한다. 이를 JAVA Object로 생각하면, VO(Value Object) 아래에 VO가 있고, 또 그 아래 VO가 있다. 내가 처리할 XML은 최대 9개의 Depth가 있는데, 하나의 VO를 반복사용할수도 없을 뿐더러 이를 XML데이터를 VO에 셋팅하는것도 문제가 있다. 그래서 여러 라이브러리들을 테스트 해봤다. jdom, dom4j, jaxp 등의 xml을 파싱하는 라이브러리와 digester, castor, xstrem 등의 xml을 VO로 변환하는 라이브러리들을 테스트 했지만, 모두 JDK버전에서 막혔다. 가능성은 있는것은 jdom과 dom4j이고, 데이터추출하는 방법은 Xpath로 한정지었다. Xpointer와 Xquery등은 다루고 싶다고 테스트할 상황이 아니였다. dom4j의 예제에서 xpath로 데이터를 추출하는 부분이 있었는데, 이해가 되지 않았다 ㅠ 그 예문이 A를 지정하면 데이터 B가 나온다라고 이야기를 하지 않는다. A를 선택하면 A에 해당되는 Element들이 선택된다는 것이다. 눈물나는 상황이다. 하지만 우여곡절끝에 XML을 변환한 DOCUMENT에서 데이터를 추출해 보면서 모든것이 이해되었다. 아래의 결과값이 그것이다. 아래를 보면 특정 노드를 array로 인식하고 있다. 이는 반복되는 부분은 알아서 array로 인식하고 있어, 특정 VO에 담지 않고도...