개발/자바 | Posted by 은우 아빠 2009. 2. 4. 15:27

jaxp를 이용한 xmlutil




jaxp를 이용하여 xml에 element 추가, attribute 추가, 제거등에 관련한 util를 제공한다.
그리고 작성한 document는 makeFile 함수를 사용하여 파일로 생성이 가능하다.
XmlUtil.java xml을 관리하는 util 파일이고
DDFileUtil.java는 XmlUtil.java를 이용하여 실제 xml을 컨트롤한 예제이다.

package com.gamizi.util;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * Xml 파싱관련 클래스
 * @author 큐앤솔브 : 강성현
 *
 */
public class XmlUtil {
public XmlUtil(){
}
/**
* xml 파읽을 읽어들여 document 를 생성한다.
* @param filePath 파일 경로
* @param fileName 파일명
* @return
* @throws Exception
*/
public Document parse(String filePath, String fileName) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
factory.setNamespaceAware( true );
factory.setValidating( true );
Document doc = builder.parse(new File(filePath+fileName));
return doc;
}
/**
* 소스의 Element로 부터 key에 해당하는 자식node를 Element로 형전환하여 반환한다.
* @param srcElement 조회를 원하는 element
* @param key 자식 로드 element
* @return
*/
public Element getElement(Element srcElement, String key){
Element retEle = null;
NodeList ddNodeList = srcElement.getChildNodes();
for(int i = 0 ; i < ddNodeList.getLength() ; i++){
Node node =srcElement.getChildNodes().item(i);
String nodeName = node.getNodeName();
if(key.equals(nodeName)){
retEle = (Element)node;
}
}
return retEle;
}

/**
* Element를 추가한다.
* @param srcElement 추가를 원하는 소스의 element
* @param document //document 
* @param elementName //추가를 원하는 element 이름
* @param removeFlag //기존에 elementName 유무에 따라 Y이면 삭제, N이면 element 계속 추가.
*/
public void addElement(Element srcElement, Document document, String elementName, 
boolean removeFlag){

if(removeFlag){
//삭제할 element를 찾는다.
//조회할 element에 element가 없다면 null을 리턴
Element removeElement = getElement(srcElement,elementName);
if(removeElement!=null){
removeElement(srcElement,removeElement);
}
}
Element addElement = document.createElement(elementName);
srcElement.appendChild(addElement);
//
}

/**
* parentsElements 에 elementName으로 element를 추가 후
* key와 value를 이용하여 attribute를 추가한다.
* removeFlag를 이용하여 Y이면 기존에 elementName 있으면 해당 element를 삭제한다.
* @param parentsElements
* @param document
* @param elementName
* @param key
* @param value
* @param removeFlag
*/
public void addElementAttribute(Element parentsElements, Document document, String elementName, 
String key, String value, boolean removeFlag){
addElement(parentsElements,document,elementName,removeFlag);
addAttribute(getElement(parentsElements,elementName),key, value);
}
/**
* 소스의 요소중 key값에 해당하는 요소가 있는지 조회
* @param srcElement
* @param key
* @return
*/
public boolean isChildElement(Element srcElement, String key){
boolean retFlag = false;
NodeList ddNodeList = srcElement.getChildNodes();
for(int i = 0 ; i < ddNodeList.getLength() ; i++){
Node node =srcElement.getChildNodes().item(i);
String nodeName = node.getNodeName();
if(key.equals(nodeName)){
retFlag = true;
}
}
return retFlag;
}
/**
* @param srcElement
* @param removeElement
*/
public void removeElement(Element srcElement, Element removeElement){
if(isChildElement(srcElement,removeElement.getTagName()))
srcElement.removeChild(removeElement);
}
public void addAttribute(Element srcElement, String key, String value){
srcElement.setAttribute(key, value);
}
public void makeFile(Document document, String fileName, String encoding, String docTypeSystem) throws Exception{
//..변환기 생성
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
//..출력 포맷 설정
transformer.setOutputProperty(OutputKeys.ENCODING, encoding);
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, docTypeSystem);
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
//..DOMSource 객체 생성
DOMSource source = new DOMSource(document);
//..StreamResult 객체 생성
StreamResult result = new StreamResult(new File(fileName));
//..파일로 저장하기
transformer.transform(source, result);
}
}