XmlConvertToExcel
/**************************
작성일 :
작성자 :
최종 수정일 :
****************************/
* jar파일 세가지 필요.
dom4j-1.6.1.jar
<classpathentry kind="lib" path="C:/j2sdk1.4.2_03/jre/lib/ext/jxl.jar"/>
<classpathentry kind="lib" path="D:/jars/jaxen-1.1-beta-2.jar"/>
1) readXml.XmlParsing.java
Xml파일을 읽고 parsing한다.
1.1) Document Read
Doc = reader.read(new File(filename));
1.2) 전문명(id), 전문설명(description) Parsing
-> XPath xpath = new Dom4jXPath( "taget된 xpath" );
public class Dom4jXPath extends BaseXPath An XPath implementation for the dom4j model This is the main entry point for matching an XPath against a DOM tree. You create a compiled XPath object, then match it against one or more context nodes using the BaseXPath.selectNodes(Object) method, as in the following example: Node node = ...; XPath path = new Dom4jXPath("a/b/c"); List results = path.selectNodes(node); |
1.3) 요청부, 정상응답부의 id를 순차적으로 Vector에 넣기
//요청부 id Element만 뽑아내기(name()이 'id'로 시작하는 Element 가져오기)
List listid =
doc.selectNodes("//request/message-template/*[starts-with(name(),'id')]");
<request> <id>요청부</id> <message-template xsi:type="message-template-referrer"> <id>공통부</id> </message-template> <message-template xsi:type="basic-message-template"> <id>PAYACCNO</id> . . . <description>출금계좌번호</description> </message-template> |
1.4) 요청부 데이터를 객체에 담는다.
listattr =
doc.selectNodes("//request/node()[@xsi:type='basic-message-template' or @xsi:type='constant-message-template']");
-> 속성(xsi:type)이 두가지 종류일 때,
<message-template xsi:type="basic-message-template"> . . . </message-template> <message-template xsi:type="constant-message-template"> . . </message-template> |
1.4.1) <message-template xsi:type="basic-message-template">
//해당 element의 자식을 뽑아내기(id,length,align,pad,description) => 객체
reqhash.put(tempid,reqEntity); // put(id, 객체)
1.4.2) <message-template xsi:type="constant-message-template">
1.5) 정상응답부 id 순차적으로 Vector에 넣기 (LOOP_TABLE밑의 id는 포함하지 않는다.)
//정상응답부 id Element만 뽑아내기
List reslistid =
doc.selectNodes("
//message-template/message-template[not(starts-with(../*/text(),'LOOP')]/*[starts-with(name(),'id')]");
1.6) 정상응답부 Data 담기
LOOP_TABLE일 경우에는 [@xsi:type='composite-message-template'] 로 뽑아내기
LOOP_TABLE에 속해있는 Element의 id만 뽑아낸다.
LOOP_TABLE이 아닐 경우에는 message-template의 xsi:type을 referrer와 basic구분하기 위해, xsi:type 네임스페이스 basic-message-template 뽑아내기.
LOOP_TABLE이 여러개 있을경우에는 HashTable에 넣어 따로 관리한다.
(LOOP_TABLE1, LOOP_TABLE2 , … )
List list1 =
doc.selectNodes("//*[@xsi:type='composite-message-template' and starts-with(./*/text(), 'LOOP_TABLE')]");
//basic-message-template일 경우 (LOOP_TABLE밑의 id만 뽑아낸다.)
List list2 =
el1.selectNodes("message-template[@xsi:type='basic-message-template']/id");
1.7) LOOP_TABLE이 아닐경우 Data 뽑아내기
LOOP_TABLE일 경우 Data 뽑아내기
'Computer 그리고 Developer' 카테고리의 다른 글
이틀동안의 쇼크와 선물 ② NHN-Daum Mashup Camp (12) | 2007.02.26 |
---|---|
이틀동안의 쇼크와 선물 ① 자바 개발자 컨퍼런스 (2) | 2007.02.26 |
[디자인패턴] 1. Strategy Pattern (5) | 2007.01.21 |
소스 보기 프로그램 (0) | 2006.10.10 |
Win32/Parite 바이러스 감염 (7) | 2006.08.31 |
[Tip] 구글 검색 팁 (0) | 2006.07.31 |
태터 1.04의 최대 문제점 도메인.. (2) | 2006.04.24 |
야후, 웹2.0 웹메일 서비스 개시 (0) | 2006.04.24 |