Java에서 XML 파일을 읽는 방법

Mohammad Irfan 2023년10월12일
  1. 샘플 XML 파일
  2. Java에서DocumentBuilderFactory를 사용하여 XML 파일 읽기
  3. Java POJO에서 XML 파일 읽기
  4. Java에서jdom2를 사용하여 XML 파일 읽기
  5. Java에서XPath를 사용하여 XML 파일 읽기
  6. Java에서DOM4J를 사용하여 XML 파일 읽기
Java에서 XML 파일을 읽는 방법

이 기사에서는DOM Parser,XML Parser,jdom2,dom4j등과 같은 일부 라이브러리를 사용하여 XML 파일을 Java 애플리케이션으로 구문 분석하는 방법을 알아 봅니다. XML은Extensible Markup Language를 의미합니다. 애플리케이션에서 데이터를 전달하는 데 사용됩니다.

샘플 XML 파일

이 기사에서 읽는 데 사용되는 샘플 XML 파일입니다.

<?xml version="1.0"?>
<company>
    <employee id="1001">
        <firstname>Tony</firstname>
        <lastname>Black</lastname>
        <salary>100000</salary>
    </employee>
    <employee id="2001">
        <firstname>Amy</firstname>
        <lastname>Green</lastname>
        <salary>200000</salary>
    </employee>
</company>

Java에서DocumentBuilderFactory를 사용하여 XML 파일 읽기

DocumentBuilder를 사용하여 빌더의 인스턴스를 만든 다음parse()메서드를 사용하여 XML 파일을 구문 분석합니다. getElementsByTagName()메소드는 XML의 각 노드를 가져온 다음for루프를 사용하여 노드의 각 하위 노드를 반복합니다. 아래 예를 참조하십시오.

import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class SimpleTesting {
  public static void main(String[] args) throws ParserConfigurationException, SAXException {
    try {
      File file = new File("company.xml");
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();
      Document document = db.parse(file);
      document.getDocumentElement().normalize();
      System.out.println("Root Element :" + document.getDocumentElement().getNodeName());
      NodeList nList = document.getElementsByTagName("employee");
      System.out.println("----------------------------");
      for (int temp = 0; temp < nList.getLength(); temp++) {
        Node nNode = nList.item(temp);
        System.out.println("\nCurrent Element :" + nNode.getNodeName());
        if (nNode.getNodeType() == Node.ELEMENT_NODE) {
          Element eElement = (Element) nNode;
          System.out.println("Employee id : " + eElement.getAttribute("id"));
          System.out.println("First Name : "
              + eElement.getElementsByTagName("firstname").item(0).getTextContent());
          System.out.println(
              "Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
          System.out.println(
              "Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());
        }
      }
    } catch (IOException e) {
      System.out.println(e);
    }
  }
}

출력:

Root Element :company
----------------------------
Current Element :employee
Employee id : 1001
First Name : Tony
Last Name : Black
Salary : 100000

Current Element :employee
Employee id : 2001
First Name : Amy
Last Name : Green
Salary : 200000

Java POJO에서 XML 파일 읽기

XML 데이터를 Java 호환 유형으로 가져 오려는 경우 Java POJO를 사용하여 데이터를 읽을 수 있습니다. 여기서는ArrayList유형 Employee를 사용하여add()메소드를 사용하여 각 노드를 추가 한 다음for루프를 사용하여 각 객체를 반복합니다. 아래 예를 참조하십시오.

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Main {
  public static void main(String[] args)
      throws ParserConfigurationException, SAXException, IOException {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse(new File("employee.xml"));
    List<Employee> employees = new ArrayList<>();
    NodeList nodeList = document.getDocumentElement().getChildNodes();
    for (int i = 0; i < nodeList.getLength(); i++) {
      Node node = nodeList.item(i);
      if (node.getNodeType() == Node.ELEMENT_NODE) {
        Element elem = (Element) node;
        String firstname =
            elem.getElementsByTagName("firstname").item(0).getChildNodes().item(0).getNodeValue();
        String lastname =
            elem.getElementsByTagName("lastname").item(0).getChildNodes().item(0).getNodeValue();
        Double salary = Double.parseDouble(
            elem.getElementsByTagName("salary").item(0).getChildNodes().item(0).getNodeValue());
        employees.add(new Employee(firstname, lastname, salary));
      }
    }
    for (Employee empl : employees) System.out.println(empl.toString());
  }
}
class Employee {
  private String Firstname;
  private String Lastname;
  private double salary;
  public Employee(String Firstname, String Lastname, double salary) {
    this.Firstname = Firstname;
    this.Lastname = Lastname;
    this.salary = salary;
  }
  @Override
  public String toString() {
    return "[" + Firstname + ", " + Lastname + ", " + salary + "]";
  }
}

출력:

[Tony, Black, 100000.0]
[Amy, Green, 200000.0]

Java에서jdom2를 사용하여 XML 파일 읽기

jdom2는 Java 클래스를 사용하여 DOM 구문 분석을 지원하는 라이브러리입니다. SAXBuilder클래스와build()메소드를 사용하여Document로 데이터를 가져온 다음getRootElement()메소드를 사용하여 요소를 가져옵니다. 아래 예를 참조하십시오.

import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.xml.sax.SAXException;

public class Main {
  public static void main(String[] args)
      throws ParserConfigurationException, SAXException, IOException {
    try {
      File inputFile = new File("/employee.xml");
      SAXBuilder saxBuilder = new SAXBuilder();
      Document document = saxBuilder.build(inputFile);
      System.out.println("Root element :" + document.getRootElement().getName());
      Element classElement = document.getRootElement();

      List<Element> studentList = classElement.getChildren();
      System.out.println("----------------------------");

      for (int temp = 0; temp < studentList.size(); temp++) {
        Element student = studentList.get(temp);
        System.out.println("\nCurrent Element :" + student.getName());
        System.out.println("First Name : " + student.getChild("firstname").getText());
        System.out.println("Last Name : " + student.getChild("lastname").getText());
        System.out.println("Salary : " + student.getChild("salary").getText());
      }
    } catch (JDOMException e) {
      e.printStackTrace();
    } catch (IOException ioe) {
      ioe.printStackTrace();
    }
  }
}

출력:

Root element :company
----------------------------
Current Element :employee
First Name : Tony
Last Name : Black
Salary : 100000

Current Element :employee
First Name : Amy
Last Name : Green
Salary : 200000

Java에서XPath를 사용하여 XML 파일 읽기

여기서는XPath라이브러리를 사용하여 Java에서 XML 파일을 구문 분석합니다. XPathFactory클래스는 모든 노드를NodeList로 컴파일 한 다음 for 루프를 통해 각 자식을 반복하는 데 사용됩니다. 아래 예를 참조하십시오.

import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Main {
  public static void main(String[] args)
      throws ParserConfigurationException, SAXException, IOException {
    try {
      File inputFile = new File("/employee.xml");
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder dBuilder;
      dBuilder = dbFactory.newDocumentBuilder();
      Document doc = dBuilder.parse(inputFile);
      doc.getDocumentElement().normalize();
      XPath xPath = XPathFactory.newInstance().newXPath();
      String expression = "/company/employee";
      NodeList nodeList =
          (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET);
      for (int i = 0; i < nodeList.getLength(); i++) {
        Node nNode = nodeList.item(i);
        System.out.println("\nCurrent Element :" + nNode.getNodeName());
        if (nNode.getNodeType() == Node.ELEMENT_NODE) {
          Element eElement = (Element) nNode;
          System.out.println("First Name : "
              + eElement.getElementsByTagName("firstname").item(0).getTextContent());
          System.out.println(
              "Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
          System.out.println(
              "Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());
        }
      }
    } catch (ParserConfigurationException e) {
      System.out.println(e);
    } catch (SAXException e) {
      System.out.println(e);
    } catch (IOException e) {
      System.out.println(e);
    } catch (XPathExpressionException e) {
      System.out.println(e);
    }
  }
}

출력:

Current Element :employee
First Name : Tony
Last Name : Black
Salary : 100000

Current Element :employee
First Name : Amy
Last Name : Green
Salary : 200000

Java에서DOM4J를 사용하여 XML 파일 읽기

Dom4j는 Java에서 XML 파일을 구문 분석 할 수있는 또 다른 라이브러리입니다. SAXReader 클래스의read()메소드는 노드를 문서로 읽는 데 사용됩니다. 아래 예를 참조하십시오.

import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.xml.sax.SAXException;

public class Main {
  public static void main(String[] args)
      throws ParserConfigurationException, SAXException, IOException {
    try {
      File inputFile = new File("employee.xml");
      SAXReader reader = new SAXReader();
      Document document = reader.read(inputFile);
      System.out.println("Root element :" + document.getRootElement().getName());
      Element classElement = document.getRootElement();
      List<Node> nodes = document.selectNodes("company/employee");
      System.out.println("----------------------------");
      for (Node node : nodes) {
        System.out.println("\nCurrent Element :" + node.getName());
        System.out.println("First Name : " + node.selectSingleNode("firstname").getText());
        System.out.println("Last Name : " + node.selectSingleNode("lastname").getText());
        System.out.println("Salary : " + node.selectSingleNode("salary").getText());
      }
    } catch (DocumentException e) {
      e.printStackTrace();
    }
  }
}

출력:

Root element :company
----------------------------
Current Element :employee
First Name : Tony
Last Name : Black
Salary : 100000

Current Element :employee
First Name : Amy
Last Name : Green
Salary : 200000

관련 문장 - Java File