Translate

2014년 7월 18일 금요일

Java에서 XML 파일을 읽는 방법 - (DOM 파서)


다음 방법을 통해 자바에서 XML 파일을 읽는 방법을 보여줄 예제입니다 DOM XML 파서가 . DOM 인터페이스를 이해하고 사용하기 쉬운 XML 파서입니다. 그것은 쉬운 탐색이나 조작을위한 객체로 모델링, 전체 XML 문서를 메모리에 그 파일을로드를 구문 분석합니다.

참고
DOM 파서는 천천히하고 데이터가 많이 들어있는 XML 문서를로드하는 경우 많은 메모리를 소모합니다. 그것을 솔루션으로 SAX 파서를 고려하십시오, SAX가 DOM보다 빠르고 적은 메모리를 사용하는 것입니다.

1. DOM 파서의 예

DOM XML 파서는 XML 파일을 읽고 아래의 각 요소에게 하나씩 출력하면된다.


File : file.xml
<?xml version="1.0"?>
<company>
 <staff>
  <firstname>yong</firstname>
  <lastname>mook kim</lastname>
  <nickname>mkyong</nickname>
  <salary>100000</salary>
 </staff>
 <staff>
  <firstname>low</firstname>
  <lastname>yin fong</lastname>
  <nickname>fong fong</nickname>
  <salary>200000</salary>
 </staff>
</company>
File : ReadXMLFile.java – A Java class to read above XML file.
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;
 
public class ReadXMLFile {
 
 public static void main(String argv[]) {
 
   try {
 
  File fXmlFile = new File("c:\\file.xml");
  DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  Document doc = dBuilder.parse(fXmlFile);
  doc.getDocumentElement().normalize();
 
  System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
  NodeList nList = doc.getElementsByTagName("staff");
  System.out.println("-----------------------");
 
  for (int temp = 0; temp < nList.getLength(); temp++) {
 
     Node nNode = nList.item(temp);
     if (nNode.getNodeType() == Node.ELEMENT_NODE) {
 
        Element eElement = (Element) nNode;
 
        System.out.println("First Name : " + getTagValue("firstname", eElement));
        System.out.println("Last Name : " + getTagValue("lastname", eElement));
               System.out.println("Nick Name : " + getTagValue("nickname", eElement));
        System.out.println("Salary : " + getTagValue("salary", eElement));
 
     }
  }
   } catch (Exception e) {
  e.printStackTrace();
   }
  }
 
  private static String getTagValue(String sTag, Element eElement) {
 NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
 
        Node nValue = (Node) nlList.item(0);
 
 return nValue.getNodeValue();
  }
 
}

2. Result

Root element :company
-----------------------
First Name : yong
Last Name : mook kim
Nick Name : mkyong
Salary : 100000
First Name : low
Last Name : yin fong
Nick Name : fong fong
Salary : 200000

댓글 5개:

  1. 자료감사합니다. 질문이 있습니다! xml파일 파싱하여 데이터를 출력하는 것까지는 잘되는데 태그값 사이에 값이 없어서 java.lang.nullpointerexception 오류가 발생합니다ㅠㅠ null값 찾아내서 출력하는 방법은 어떻게 하나요?

    답글삭제
    답글
    1. 음 자세한 상황은 모르겠지만...보통 조건문에 널이 아닌것만 해서 출력하면 되지않을까요?

      삭제
  2. 자료 감사합니다. 게시자님 덕분에 많이 배워 가고 있는 학생입니다!!!!
    저도 질문이 있는데, 코드에 쓰인 개개의 api함수를 잘 모르는 상황이라서요,,, 어느 사이트가 도움이 될까요?
    https://developer.android.com에서 정보를 찾긴 하는데, 검색요령이 없어서 애를 먹고 있습니다...ㅠㅠ

    답글삭제
    답글
    1. 감사합니다^^ 굉장히 예전에 포스팅한자료인데 도움이 아직 된다니 다행이네요 ㅎㅎ

      메뉴얼사이트를 통으로 보는건 비현실적이구요 ㅜ 모르는게 나올때마다 함수명을 키워드로 해서 검색하는게 제일 효율적입니다 영어로 나오는게 부담스럽다면 구글검색옵션을 한국어로 놓고 검색해보시는것도 좋은방법입니다
      검색하는것도 개인의 실력이기때문에 검색도 많이해보시면 많이 늘거에요 꾸준히 하시다보면 자연스럽게 잘될거에요 😅

      삭제