본문 바로가기

나만의 작업

Xml파일을 Excel파일로 변환하는 프로그램

XmlConvertToExcel

/**************************

작성일 : 2006.08.30

작성자 : 유미

최종 수정일 : 2006.08.30

****************************/

* 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 뽑아내기