목차

XML데이터파싱

개요

XML 파일을 로드 후 XML 데이터를 파싱 하여 구조적인 데이터 형태로 변환 하는 기능을 제공한다. XML 데이터 파싱은 웹서비스(Web Service), 전자문서, 데이터교환과 같은 응용어플리케이션에서 사용할 수 있다.

본 기능은 전자정부 표준프레임워크 공통컴포넌트 요소기술 내에 구성되어 있다.

설명

  ① XML 데이터를 파싱하여 구조적인 데이터 형태로 변환 하는 기능 
관련소스
유형대상소스명설명비고
Serviceegovframework.com.utl.sim.service.EgovXMLDoc.javaXML파싱/조립 요소기술 클래스
JSPWEB_INF/jsp/egovframework/cmm/utl/EgovXMLDoc.jsp테스트 페이지
메소드
결과값메소드명설명내용
booleancreatSchemaToClass(String xml, String ja)클래스생성XML스키마 구조를 읽어 이에 맞는 자바클래스 생성
SndngMailDocumentgetXMLToClass(String file)XML파싱XML파일을 파싱하여 메일발송 클래스(임의)에 내용을 담아 반환
booleangetClassToXML(SndngMailDocument mailDoc, String file)XML조립메일발송(임의) 객체의 데이터를 XML파일로 저장
DocumentgetXMLDocument(String xml)XML파싱XML 파일을 파싱하여 데이터를 조작할 수 있는 Document 객체를 반환
ElementgetRootElement(Document document)ROOT이동Document의 최상의 Element로 이동
ElementinsertElement(Document document, Element rt, String id)노드생성하위에 새로운 Elemenet를 생성
ElementinsertElement(Document document, Element rt, String id, String text)문자열생성하위에 문자열을 가지는 새로운 Elemenet를 생성
TextinsertText(Document document, Element rt, String text)문자열추가하위에 문자열을 추가
ElementgetParentNode(Element current)상위노드반환마지막으로 입력되었거나 참조된 XML Node의 상위 Element를 리턴
booleangetXMLFile(Document document, String file)XML조립Document 객체를 XML파일로 저장
Input
Output

환경설정

https://xmlbeans.apache.org/index.html (소개) https://xmlbeans.apache.org/download/index.html (다운로드)

(윈도우 명령어 실행창에서)
set XMLBEANS_HOME=C:\xmlbeans-2.0.0
set XMLBEANS_LIB=%XMLBEANS_HOME%\lib
set JAVA_HOME=C:\Progra~1\Java\jdk1.5.0
set PATH=%XMLBEANS_HOME%\bin;%JAVA_HOME%\bin; 
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import namespace="http://www.w3.org/XML/1998/namespace"
        schemaLocation="http://www.w3.org/2001/xml.xsd" />
  <xs:element name="sndngMail">
    <xs:complexType>
      <xs:sequence>
	<xs:element name="mssageId"		type="xs:string"/>
        <xs:element name="dsptchPerson"		type="xs:string"/>
        <xs:element name="recptnPerson"		type="xs:string"/>
        <xs:element name="sj"			type="xs:string"/>
        <xs:element name="emailCn"		type="xs:string"/>
	<xs:element name="sndngResultCode"	type="xs:string"/>
	<xs:element name="orignlFileList"	type="xs:string"/>
	<xs:element name="streFileList"		type="xs:string"/>
      </xs:sequence>  
    </xs:complexType>
  </xs:element>
</xs:schema>
scomp -out target.jar source.xsd

source.xsd : 위의 스키마 파일 형태를 갖춘 XML
target.jar : 스키마 컴파일을 통해 생성되는 JAR
-out(src) : JAR 로 생성하는 경우 out 옵션, 소스로 생성하는 경우 src 옵션

<sndngMail>
    <dsptchPerson>example1@example.com</dsptchPerson>
    <recptnPerson>example2@example.com</recptnPerson>
    <sj>테스트 메일 입니다.</sj>
    <emailCn>내용입니다.</emailCn>
    <sndngResultCode>R</sndngResultCode>
</sndngMail>

사용방법

	import egovframework.com.utl.sim.service.EgovXMLDoc;
 
	// 스키마 파일을 읽어 자바 클래스 생성
	// 결과물은 스키마 구조와 일치하는 클래스가 생성된 jar 파일
	String file = request.getParameter("file");
	String jar = request.getParameter("jar");
	boolean result = false;
	if (file != null && file.length() > 0
		&& jar != null && jar.length() > 0) {
		result = EgovXMLDoc.creatSchemaToClass(file, jar);
	}
 
	// 메일정보를 담은 XML파일의 데이터를 읽어 메일 객체로 파싱한다.
	String file = request.getParameter("file");
	String resultStr = "";
	if (file != null && file.length() > 0) {
		SndngMailDocument mailDoc = EgovXMLDoc.getXMLToClass(file);
		SndngMailDocument.SndngMail mailElement = mailDoc.getSndngMail();
		resultStr += "1.발신자: " + mailElement.getDsptchPerson() + "<br>";
		resultStr += "2.수신자: " + mailElement.getRecptnPerson() + "<br>";
		resultStr += "3.제목: " + mailElement.getSj() + "<br>";
		resultStr += "4.내용: " + mailElement.getEmailCn() + "<br>";
		resultStr += "5.발신상태: " + mailElement.getSndngResultCode() + "<br>";
	}

XML 스키마 파일을 통해 생성된 JAR 파일을 사용하고자 하는 시스템에 추가한 뒤, 이 클래스를 이용하여 XML 데이터를 파싱하고 조립할 수 있도록 구현하였다. 요소기술 테스트를 위해서 현재 임의로 메일정보를 담는 클래스를 XML스키마를 통하여 생성하였으며 이를 가지고 XML파일을 클래스로, 클래스의 데이터를 XML파일로 조립/파싱함을 보여주도록 구성하였다.

참고자료