DOM파싱 수정, 삭제
XML파일
|
<?xml version=”1.0″ encoding=”UTF-8″ standalone=”no”?> <sawon> <list> <sabun>1</sabun> <name>홍길동</name> <dept>영업부</dept> <loc>서울</loc> <hiredate>2010-05-02</hiredate> </list> <list> <sabun>2</sabun> <name>심청이</name> <dept>기획부</dept> <loc>서울</loc> <hiredate>2010-05-02</hiredate> </list> <list> <sabun>3</sabun> <name>박문수</name> <dept>개발부</dept> <loc>서울</loc> <hiredate>2010-05-02</hiredate> </list>
</sawon>
|
클래스 선언과 생성자
|
package com.xml;
import java.util.*; import java.io.*; import java.text.*;//날짜변환
import javax.xml.parsers.*;//파싱 import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.*; import javax.xml.transform.stream.*;
import org.w3c.dom.*;//돔
import com.sun.org.apache.xalan.internal.xsltc.cmdline.Transform;
public class SawonXML {
// > Sawon > list > sabun > // Document > Element > Element > Element > text private Document doc; //전역 DB. 파싱된 위치를 도큐먼트라고 한다. DB로 따지면 ORCL이다. (전역 데이터베이스가 ORCL이다) private Element root; //테이블. 테이블명을 엘리먼트라고 한다. private String path=”C:\\webDev2\\workspace\\XMLProject2\\WebContent\\WEB-INF\\data\\sawon.xml”;//XML위치 private static SawonXML xml;//싱글턴 패턴. static을 쓴다. 메모리를 하나만 써야 하기 때문에 쓴다.
public SawonXML(){ try{ // ■파서기 생성 // 파서: xml을 읽어서 트리 형태로 메모리에 저장(파싱:xml->doc) //HTML, XML, WML 등을 파싱할 수 있다. //파서기: 인터페이스로 되어있다 DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); //DocumentBuilder는 인터페이스이다. //인터페이스는 추상클래스의 일종이므로, 스스로 new를 할 수 없기에 DocumentBuilderFactory를 이용해서 메모리 할당한다. DocumentBuilder db=dbf.newDocumentBuilder(); // ■저장공간 확보 doc = db.parse(new File(path)); //doc가 xml 정보를 다 가진다. // ■테이블(최상위 태그) 가져옴 역파싱(doc->xml file로 바꿀 수 있다) 다시 말해, 돔은 crud가 가능하다. root=doc.getDocumentElement(); }catch(Exception ex){System.out.println(ex.getMessage());} }
public static SawonXML newInstance(){ if(xml==null) xml=new SawonXML(); return xml; }
……….. //이 부분에 DOC 제어에 관한 것들을 넣는다.
}
|
DOC 제어(SawonXML 내에 작성)
xml의 데이터 삭제
|
public class SawonXML {
(중략)………..
public void sawonDelete(int sabun){ try{ NodeList list=root.getElementsByTagName(“list”); for(int i=0;i<list.getLength();i++){ list=root.getElementsByTagName(“sabun”); String sa=list.item(i).getFirstChild().getNodeValue(); list=root.getElementsByTagName(“list”); if(sabun==Integer.parseInt(sa)){ Element listElem=(Element)list.item(i); root.removeChild(listElem); xmlSave(); break; }//if }//for }//try catch(Exception ex){System.out.println(ex.getMessage());} }
(중략)………..
}
|
xml에 데이터 추가
|
public class SawonXML {
(중략)………..
public void sawonInsert(SawonVO vo){ try{ //리스트 노드 만든다 Element list=doc.createElement(“list”); // <list></list>까지 한 쌍을 만들어준다. //나머지 노드 만든다 Element sabun=doc.createElement(“sabun”); // <sabun></sabun> => 사이에 넣는걸 어펜드 차일드라고 함 Text stxt=doc.createTextNode(String.valueOf(sawonMax()));//텍스트 노드를 만들어서 넣어야 함 sabun.appendChild(stxt); Element name=doc.createElement(“name”); Text ntxt=doc.createTextNode(vo.getName()); name.appendChild(ntxt); Element dept=doc.createElement(“dept”); Text dtxt=doc.createTextNode(vo.getDept()); dept.appendChild(dtxt); Element loc=doc.createElement(“loc”); Text ltxt=doc.createTextNode(vo.getLoc()); loc.appendChild(ltxt); Element hiredate=doc.createElement(“hiredate”); SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-mm-dd”); Text htxt=doc.createTextNode(sdf.format(new Date())); hiredate.appendChild(htxt); //5개 노드를 사원 밑에 다 붙인다 list.appendChild(sabun); list.appendChild(name); list.appendChild(dept); list.appendChild(loc); list.appendChild(hiredate); root.appendChild(list); xmlSave(); }catch(Exception ex){ System.out.println(ex.getMessage()); } }
(중략)……….. }
|
xml을 저장 (DOC를 XML로 변환):
※추가/삭제한 것을 반영
|
public class SawonXML {
(중략)………..
public void xmlSave(){ try{ TransformerFactory tff=TransformerFactory.newInstance(); Transformer tf=tff.newTransformer(); tf.setOutputProperty(OutputKeys.INDENT,”yes”);//들여쓰기 tf.setOutputProperty(OutputKeys.ENCODING,”UTF-8″); DOMSource dom=new DOMSource(doc); StreamResult sr=new StreamResult(path);//XML파일로 보냄 tf.transform(dom, sr); }catch(Exception ex){ System.out.println(ex.getMessage()); }
(중략)……….. }
|
XML 내에서 검색
|
public class SawonXML {
(중략)………..
public SawonVO sawonFindData(int sabun){ SawonVO vo=new SawonVO(); try{ NodeList node=root.getElementsByTagName(“list”); for(int i=0;i<node.getLength();i++){ node=root.getElementsByTagName(“sabun”); String sa=node.item(i).getFirstChild().getNodeValue();//사번값 첫번째 값을 가져온다 node=root.getElementsByTagName(“name”); String name=node.item(i).getFirstChild().getNodeValue(); node=root.getElementsByTagName(“dept”); String dept=node.item(i).getFirstChild().getNodeValue(); node=root.getElementsByTagName(“loc”); String loc=node.item(i).getFirstChild().getNodeValue(); node=root.getElementsByTagName(“hiredate”); String hiredate=node.item(i).getFirstChild().getNodeValue(); if(sabun==Integer.parseInt(sa)){ vo.setSabun(Integer.parseInt(sa)); vo.setName(name); vo.setDept(dept); vo.setLoc(loc); vo.setHiredate(hiredate); break; } } } catch(Exception ex){System.out.println(ex.getMessage());} return vo; }
(중략)……….. }
|
XML내에서 읽기1(목록 출력) (오라클의 SELECT)
|
public class SawonXML {
(중략)………..
public ArrayList<SawonVO> sawonAllData(){ ArrayList<SawonVO> list=new ArrayList<SawonVO>(); try{ //노드 리스트로 묶는다. //루트부터 시작해서 값을 가져온다. NodeList node=root.getElementsByTagName(“list”); for(int i=0;i<node.getLength();i++){ node=root.getElementsByTagName(“sabun”); String sabun=node.item(i).getFirstChild().getNodeValue();//사번값 첫번째 값을 가져온다 node=root.getElementsByTagName(“name”); String name=node.item(i).getFirstChild().getNodeValue(); node=root.getElementsByTagName(“dept”); String dept=node.item(i).getFirstChild().getNodeValue(); node=root.getElementsByTagName(“loc”); String loc=node.item(i).getFirstChild().getNodeValue(); node=root.getElementsByTagName(“hiredate”); String hiredate=node.item(i).getFirstChild().getNodeValue(); SawonVO vo=new SawonVO(); vo.setSabun(Integer.parseInt(sabun)); vo.setName(name); vo.setDept(dept); vo.setLoc(loc); vo.setHiredate(hiredate); list.add(vo); } }catch(Exception ex){ex.getMessage();} return list; }
(중략)……….. }
|
XML내에서 읽기2 (오라클의 SELECT)
|
public class SawonXML {
(중략)………..
public int sawonMax(){ int sabun=0; try{ NodeList list=root.getElementsByTagName(“list”); for(int i=0;i<list.getLength();i++){ // 1 2 3 list=root.getElementsByTagName(“sabun”); String sa=list.item(i).getFirstChild().getNodeValue(); if(sabun<Integer.parseInt(sa)){ sabun=Integer.parseInt(sa); } } }catch(Exception ex){ System.out.println(ex.getMessage()); } return sabun+1; }
(중략)……….. }
|