Java에서 XML 파일을 읽는 방법
- 샘플 XML 파일
- 
          
            Java에서DocumentBuilderFactory를 사용하여 XML 파일 읽기
- Java POJO에서 XML 파일 읽기
- 
          
            Java에서jdom2를 사용하여 XML 파일 읽기
- 
          
            Java에서XPath를 사용하여 XML 파일 읽기
- 
          
            Java에서DOM4J를 사용하여 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