2008. 8. 30. 23:13

XML 문서 편집

1. 새로운 요소 추가

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.*;
public class DOMParser06 {
   public static void main(String args[]) throws Exception {
      //DOM를 준비한다
      DocumentBuilderFactory dbf
         	= DocumentBuilderFactory.newInstance();
      DocumentBuilder parser = dbf.newDocumentBuilder();
      //문서 읽어들이기
      Document xmldoc = parser.parse("student.xml");
      //문서의 출발점을 얻는다
      Element root = xmldoc.getDocumentElement();
      //노드의 자식(child)노드를 찾아간다
      getNode(root);
      //문서 써넣기
      XmlDocument xdoc = (XmlDocument) xmldoc;
      BufferedWriter bw = 
	new BufferedWriter(new FileWriter("student_addelement.xml"));
      xdoc.write(bw,"EUC-KR");
   }

   //노드의 자(child)를 찾아간다
   public static void getNode(Node n) {
      for(Node ch = n.getFirstChild();ch != null;ch = ch.getNextSibling()) {
         //요소를 처리한다
         if(ch.getNodeType() == Node.ELEMENT_NODE){
            if(ch.getNodeName().equals("초등학생")){
               Document doc = ch.getOwnerDocument();
               Element comp = doc.createElement("주소");
               Text txt = doc.createTextNode("서울시 송파구");
               ch.appendChild(comp);
               comp.appendChild(txt);
            }
            getNode(ch);
         }
      }
   }
}

2. 원하는 요소의 삭제

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.*;
public class DOMParser07 {
   public static void main(String args[]) throws Exception {
      //DOM를 준비한다
      DocumentBuilderFactory dbf
         = DocumentBuilderFactory.newInstance();
      DocumentBuilder parser = dbf.newDocumentBuilder();
      //문서 읽어들이기
      Document xmldoc = parser.parse("student.xml");
      //문서의 출발점을 얻는다
      Element root = xmldoc.getDocumentElement();
      //노드의 자식(child)노드를 찾아간다
      getNode(root);
      //문서 써넣기
      XmlDocument xdoc = (XmlDocument) xmldoc;
      BufferedWriter bw = 
	new BufferedWriter(new FileWriter("student_delelement.xml"));
      xdoc.write(bw,"EUC-KR");
   }

   //노드의 자(child)를 찾아간다
   public static void getNode(Node n) {
      for(Node ch = n.getFirstChild();ch != null;ch = ch.getNextSibling()){
         //요소를 처리한다
         if(ch.getNodeType() == Node.ELEMENT_NODE){
            if(ch.getNodeName().equals("주소")){
               Node pr = ch.getParentNode();
               pr.removeChild(ch);
            }
            getNode(ch);
         }
      }
   }
}

3. 요소에 새로운 텍스트를 추가

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.*;
public class DOMParser08 {
   public static void main(String args[]) throws Exception {
      //DOM를 준비한다
      DocumentBuilderFactory dbf
         = DocumentBuilderFactory.newInstance();
      DocumentBuilder parser = dbf.newDocumentBuilder();
      //문서 읽어들이기
      Document xmldoc = parser.parse(new FileInputStream("student.xml"));
      //문서의 출발점을 얻는다
      Element root = xmldoc.getDocumentElement();
      //노드의 자식(child)노드를 찾아간다
      getNode(root);
      //문서 써넣기
      XmlDocument xdoc = (XmlDocument) xmldoc;
      BufferedWriter bw = 
	new BufferedWriter(new FileWriter("student_addtext.xml"));
      xdoc.write(bw,"EUC-KR");
   }
   public static void getNode(Node n) {
      for(Node ch = n.getFirstChild();ch != null;ch = ch.getNextSibling()){
         //요소를 처리한다
         if(ch.getNodeType() == Node.ELEMENT_NODE){
            if(ch.getNodeName().equals("초등학생")){
               Document doc = ch.getOwnerDocument();
               Text txt = doc.createTextNode("초등학생 자료입니다.");
               ch.appendChild(txt);
            }
            getNode(ch);
         }
      }
   }
}

4. 새로운 속성을 추가

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.*;
public class DOMParser09 {
   public static void main(String args[]) throws Exception {
      //DOM를 준비한다
      DocumentBuilderFactory dbf
         = DocumentBuilderFactory.newInstance();
      DocumentBuilder parser = dbf.newDocumentBuilder();
      //문서 읽어들이기
      Document xmldoc = parser.parse("student.xml");
      //문서의 출발점을 얻는다
      Element root = xmldoc.getDocumentElement();
      //노드의 자식(child)노드를 찾아간다
      getNode(root);
      //문서 써넣기
      XmlDocument xdoc = (XmlDocument) xmldoc;
      BufferedWriter bw = 
	new BufferedWriter(new FileWriter("student_addattr.xml"));
      xdoc.write(bw,"EUC-KR");
   }
   //노드의 자(child)를 찾아간다
   public static void getNode(Node n) {
      for(Node ch = n.getFirstChild();ch != null;ch = ch.getNextSibling()){
         //요소를 처리한다
         if(ch.getNodeType() == Node.ELEMENT_NODE) {
            if(ch.getNodeName().equals("초등학생")) {
               Element elm =(Element) ch;
               elm.setAttribute("학년", "3");
            }
            getNode(ch);
         }
      }
   }
}

5. 원하는 속성을 삭제

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.*;
public class DOMParser10 {
   public static void main(String args[]) throws Exception {
      //DOM를 준비한다
      DocumentBuilderFactory dbf
         = DocumentBuilderFactory.newInstance();
      DocumentBuilder parser = dbf.newDocumentBuilder();
      //문서 읽어들이기
      Document xmldoc = parser.parse("student.xml");
      //문서의 출발점을 얻는다
      Element root = xmldoc.getDocumentElement();
      //노드의 자식(child)노드를 찾아간다
      getNode(root);
      //문서 써넣기
      XmlDocument xdoc = (XmlDocument) xmldoc;
      BufferedWriter bw = 
	new BufferedWriter(new FileWriter("student_delattr.xml"));
      xdoc.write(bw,"EUC-KR");
   }
   //노드의 자식(child)노드를 찾아간다
   public static void getNode(Node n) {
      for(Node ch = n.getFirstChild();ch != null;ch = ch.getNextSibling()) {
         //요소를 처리한다
         if(ch.getNodeType() == Node.ELEMENT_NODE) {
            if(ch.getNodeName().equals("이름")) {
               NamedNodeMap attrmap = ch.getAttributes();
               attrmap.removeNamedItem("성별");
            }
            getNode(ch);
         }
      }
   }
}

6. 원하는 요소들을 추출하여 새로운 XML을 작성

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.*;
public class DOMParser11 {
   public static void main(String args[]) throws Exception {
      //DOM를 준비한다
      DocumentBuilderFactory dbf
         = DocumentBuilderFactory.newInstance();
      DocumentBuilder parser = dbf.newDocumentBuilder();
      //문서 읽어들이기
      Document xmldoc1  = parser.parse(new FileInputStream("student.xml"));
      //문서를 새로 작성한다
      Document xmldoc2 = parser.newDocument();
      //루트 요소를 추가한다
      Element root = xmldoc2.createElement("어린이");
      xmldoc2.appendChild(root);
      //요소를 추출한다
      NodeList lst = xmldoc1.getElementsByTagName("이름");
      for(int i=0; i<lst.getLength(); i++){
         Node n = lst.item(i);
         for(Node ch = n.getFirstChild();ch != null;ch = ch.getNextSibling()){
            Element elm = xmldoc2.createElement("이름");
            Text txt = xmldoc2.createTextNode(ch.getNodeValue());
            elm.appendChild(txt);
            root.appendChild(elm);
         }
      }
      //문서 써넣기
      XmlDocument xdoc = (XmlDocument) xmldoc2;
      BufferedWriter bw = new BufferedWriter(new FileWriter("student_new.xml"));
      xdoc.write(bw,"EUC-KR");
   }
}

7. 원하는 속성들을 추출하여 새로운 XML을 작성

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.apache.crimson.tree.*;
public class DOMParser12 {
   public static void main(String args[]) throws Exception {
      //DOM를 준비한다
      DocumentBuilderFactory dbf
         = DocumentBuilderFactory.newInstance();
      DocumentBuilder parser  = dbf.newDocumentBuilder();
      //문서 읽어들이기
      Document xmldoc1 = parser.parse(new FileInputStream("student.xml"));
      //문서를 새로 작성한다
      Document xmldoc2 = parser.newDocument();
      //루트 요소를 추가한다
      Element root = xmldoc2.createElement("어린이");
      xmldoc2.appendChild(root);
      //요소를 추출한다
      NodeList lst = xmldoc1.getElementsByTagName("이름");
      for(int i=0; i<lst.getLength(); i++){
         Node n = lst.item(i);
         NamedNodeMap attrlist = n.getAttributes();
         Node attr = attrlist.getNamedItem("성별");
         Element elm = xmldoc2.createElement("성별");
         Text txt = xmldoc2.createTextNode(attr.getNodeValue());
         elm.appendChild(txt);
         root.appendChild(elm);
      }
      //문서 써넣기
      XmlDocument xdoc = (XmlDocument) xmldoc2;
      BufferedWriter bw = 
	new BufferedWriter(new FileWriter("student_newattr.xml"));
      xdoc.write(bw,"EUC-KR");
   }
}

참고 : e-Campus 강좌 중에서...