본문 바로가기

알아두면 좋은 IT 지식/Java

XSLT란? java, javascript 소스 예시를 통해서 알아보기

 

xslt란 xml양식의 문서를 xsl스타일을 입힌 xhtml같은 양식의 문서로 변환하는 간단하면서 복잡한 기술이다.

자세한 이론은 아래 링크를 통해서 확인하도록 한다.

tcpschool.com/xml/xml_xslt_intro

www.w3schools.com/xml/xsl_intro.asp

 

 

예시를 들어서 알아보자.


Java 소스 예시

 

 

Source xmlSource = new StreamSource(new StringReader(xml));
Source xsltSource = new StreamSource(new StringReader(xsl));
TransformerFactory ft = TransformerFactory.newInstance();

StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);

Transformer trans = ft.newTransformer(xsltSource);
trans.transform(xmlSource, result);

String strResult = writer.toString();

 

먼저 xml원문을 xml변수에 넣고, 스타일시트를 xsl변수에 담는다.

각각 xmlSource와 xsltSource라는 java에서 제공하는 오브젝트 데이터형으로 변환한다.

폼을 변환하는데 쓰이는 라이브러리인 TransformerFactory를 사용해서 xsltSource를 변환폼으로 지정하고,

변환폼으로 xmlSource를 변환한 결과를 StremWriter를 사용하여 writer변수에 저장한다.

writer에 저장한 값를 toString()을 통해서 String형식으로 strResult변수에 저장한다.


JavaScript 소스 예시

 

 

//IE

 

var xmlFile;

var xml = new ActiveXObject("Microsoft.XMLDOM");

xml.async = false;

xml.loadXML(xmlFile)

 

var xslFile;

var xsl = new ActiveXObject("Microsoft.XMLDOM");

xsl.async = false;

xsl.loadXML(xslFile);

 

var xslt = xml.transformNode(xsl);

 

xmlFile, xslFile을 각각 ActiveXObject XMLDOM을 사용해서 xml양식으로 변환하여 xml,xsl변수에 저장한다.

transformNode를 사용해서 xml에 xsl스타일을 입혀서 xslt변수에 저장한다.

 

 

//IE 외 브라우저 (ex. chrome)

 

var parser = new DOMparser();

var xml = parser.parseFormString(xmlFile, "text/xml");

var xsl = parser.parseFormString(xslFile, "text/xml");

var xsltProcessor = new XSLTProcessor();

xsltProcessor.importStylesheet(xsl);

var xlst = xsltProcessor.transformToFragment(xml, document);

 

IE 외 브라우저에서는 ActiveX를 사용할 수 없기 때문에 DOMparser를 사용하여 xml양식으로 변환한다.

XSLTProcessor를 사용하여 xsl을 변환에 사용할 스타일시트로 지정한다.

transformToFragment을 사용하여 xml을 xsl스타일시트를 사용하여 변환한 후 xslt변수에 저장한다.


전자세금계산서 연동 프로젝트를 진행할 당시 세금계산서 원본이 xml로 되어있다 보니 해당 xml을 국세청 등에서 보여주는 양식과 비슷한 양식으로 변환하여 사용자에게 보여주기 위해서 XSLT라는 기술을 도입하여 사용해봤다.

비교적 간단한 소스코드로 xml파일을 xhtml과 같은 스타일이 적용된 파일로 변환할 수 있었다.

단, 언어별로 제공하는 변환함수가 차이가 있기 때문에 각 언어별로 사용하는 라이브러리를 찾고 사용해보는 과정이 필요하다.

(특정 언어의 경우 해당 함수가 제공되지 않아서 javascript로 대체하였다.)

 

아래는 실제로 개발한 java소스에 포함된 내용이다. (위 예시와 거의 99%동일하게 작성되었다.)