Lesen von XML-Dateien in Java

Mohammad Irfan 12 Oktober 2023
  1. Beispiel-XML-Datei
  2. Lesen Sie die XML-Datei mit DocumentBuilderFactory in Java
  3. Lesen Sie die XML-Datei in Java POJO
  4. XML-Datei mit jdom2 in Java lesen
  5. XML-Datei mit XPath in Java lesen
  6. XML-Datei mit DOM4J in Java lesen
Lesen von XML-Dateien in Java

In diesem Artikel erfahren Sie, wie Sie XML-Dateien mithilfe einiger Bibliotheken wie DOM Parser, XML Parser, jdom2, dom4j usw. in Java-Anwendungen analysieren. XML steht für Extensible Markup Language. Hiermit werden Daten in einer Anwendung übergeben.

Beispiel-XML-Datei

Dies ist eine XML-Beispieldatei, die zum Lesen dieses Artikels verwendet wird.

<?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>

Lesen Sie die XML-Datei mit DocumentBuilderFactory in Java

Wir verwenden DocumentBuilder, um eine Instanz für den Builder zu erstellen und anschließend die XML-Datei mit der Methode parse() zu analysieren. Die Methode getElementsByTagName() ruft jeden Knoten des XML ab, und dann wird jeder untergeordnete Knoten des Knotens mithilfe der Schleife for iteriert. Siehe das folgende Beispiel.

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);
    }
  }
}

Ausgabe:

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

Lesen Sie die XML-Datei in Java POJO

Wenn wir XML-Daten in einen Java-kompatiblen Typ bringen möchten, können wir Java POJO zum Lesen von Daten verwenden. Hier verwenden wir den Employee vom Typ ArrayList, um jeden Knoten mit der Methode add() hinzuzufügen, und verwenden dann die Schleife for, um jedes Objekt zu iterieren. Siehe das folgende Beispiel.

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 + "]";
  }
}

Ausgabe:

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

XML-Datei mit jdom2 in Java lesen

Jdom2 ist eine Bibliothek, die die DOM-Analyse mithilfe von Java-Klassen unterstützt. Wir haben die Klasse SAXBuilder und die Methode build() verwendet, um Daten in Document abzurufen, und dann mithilfe der Methode getRootElement() die Elemente abgerufen. Siehe das folgende Beispiel.

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();
    }
  }
}

Ausgabe:

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

XML-Datei mit XPath in Java lesen

Hier verwenden wir die Bibliothek XPath, um XML-Dateien in Java zu analysieren. Die Klasse XPathFactory wird verwendet, um alle Knoten in NodeList zu kompilieren und dann jedes untergeordnete Element für die for-Schleife zu durchlaufen. Siehe das folgende Beispiel.

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);
    }
  }
}

Ausgabe:

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

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

XML-Datei mit DOM4J in Java lesen

Das Dom4j ist eine weitere Bibliothek, die XML-Dateien in Java analysieren kann. Die Methode read() der SAXReader-Klasse wird zum Einlesen von Knoten in das Dokument verwendet. Siehe das folgende Beispiel.

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();
    }
  }
}

Ausgabe:

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

Verwandter Artikel - Java File