So lesen Sie eine XML-Datei in Java - (DOM Parser)

Lesen einer XML-Datei in Java - (DOM Parser)

In diesem Tutorial zeigen wir Ihnen, wie Sie eine XML-Datei überDOM XML parser lesen. DOM parser parses the entire XML document and loads it into memory; then models it in a “TREE” structure for easy traversal or manipulation.

Kurz gesagt, eine XML-Datei wird inDOM oder eine Baumstruktur umgewandelt, und Sie müssen einen Knoten nach Knoten durchlaufen, um das zu erhalten, was Sie möchten.

What is Node?
Im DOM ist alles in einem XML-Dokument ein Knoten,read this.

Warning
Der DOM-Parser ist langsam und verbraucht viel Speicher, wenn er ein XML-Dokument lädt, das viele Daten enthält. Bitte betrachten Sie den SAX-Parser als Lösung dafür. SAX ist schneller als DOM und benötigt weniger Speicher.

1. Beispiel für einen DOM-XML-Parser

Dieses Beispiel zeigt Ihnen, wie Sie den Knoten anhand von "Name" ermitteln und den Wert anzeigen.

/Users/example/staff.xml


    
        yong
        mook kim
        example
        100000
    
    
        low
        yin fong
        fong fong
        200000
    

ReadXMLFile.java

package com.example.seo;

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("/Users/example/staff.xml");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(fXmlFile);

    //optional, but recommended
    //read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
    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);

        System.out.println("\nCurrent Element :" + nNode.getNodeName());

        if (nNode.getNodeType() == Node.ELEMENT_NODE) {

            Element eElement = (Element) nNode;

            System.out.println("Staff 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("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent());
            System.out.println("Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());

        }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
  }

}

Ergebnis

Root element :company
----------------------------

Current Element :staff
Staff id : 1001
First Name : yong
Last Name : mook kim
Nick Name : example
Salary : 100000

Current Element :staff
Staff id : 2001
First Name : low
Last Name : yin fong
Nick Name : fong fong
Salary : 200000

2. Den Knoten durchschleifen

In diesem Beispiel wird dieselbe "staff.xml" gelesen und es wird gezeigt, wie Sie den Knoten einzeln durchlaufen und den Knotennamen und -wert sowie gegebenenfalls das Attribut ausdrucken.

ReadXMLFile2.java

package com.example.seo;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ReadXMLFile2 {

  public static void main(String[] args) {

    try {

    File file = new File("/Users/example/staff.xml");

    DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance()
                             .newDocumentBuilder();

    Document doc = dBuilder.parse(file);

    System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

    if (doc.hasChildNodes()) {

        printNote(doc.getChildNodes());

    }

    } catch (Exception e) {
    System.out.println(e.getMessage());
    }

  }

  private static void printNote(NodeList nodeList) {

    for (int count = 0; count < nodeList.getLength(); count++) {

    Node tempNode = nodeList.item(count);

    // make sure it's element node.
    if (tempNode.getNodeType() == Node.ELEMENT_NODE) {

        // get node name and value
        System.out.println("\nNode Name =" + tempNode.getNodeName() + " [OPEN]");
        System.out.println("Node Value =" + tempNode.getTextContent());

        if (tempNode.hasAttributes()) {

            // get attributes names and values
            NamedNodeMap nodeMap = tempNode.getAttributes();

            for (int i = 0; i < nodeMap.getLength(); i++) {

                Node node = nodeMap.item(i);
                System.out.println("attr name : " + node.getNodeName());
                System.out.println("attr value : " + node.getNodeValue());

            }

        }

        if (tempNode.hasChildNodes()) {

            // loop again if has child nodes
            printNote(tempNode.getChildNodes());

        }

        System.out.println("Node Name =" + tempNode.getNodeName() + " [CLOSE]");

    }

    }

  }

}

Ergebnis:

Root element :company

Node Name =company [OPEN]
Node Value =

        yong
        mook kim
        example
        100000


        low
        yin fong
        fong fong
        200000



Node Name =staff [OPEN]
Node Value =
        yong
        mook kim
        example
        100000

attr name : id
attr value : 1001

Node Name =firstname [OPEN]
Node Value =yong
Node Name =firstname [CLOSE]

Node Name =lastname [OPEN]
Node Value =mook kim
Node Name =lastname [CLOSE]

Node Name =nickname [OPEN]
Node Value =example
Node Name =nickname [CLOSE]

Node Name =salary [OPEN]
Node Value =100000
Node Name =salary [CLOSE]
Node Name =staff [CLOSE]

Node Name =staff [OPEN]
Node Value =
        low
        yin fong
        fong fong
        200000

attr name : id
attr value : 2001

Node Name =firstname [OPEN]
Node Value =low
Node Name =firstname [CLOSE]

Node Name =lastname [OPEN]
Node Value =yin fong
Node Name =lastname [CLOSE]

Node Name =nickname [OPEN]
Node Value =fong fong
Node Name =nickname [CLOSE]

Node Name =salary [OPEN]
Node Value =200000
Node Name =salary [CLOSE]
Node Name =staff [CLOSE]
Node Name =company [CLOSE]

Note
Sie können an diesenHow to get Alexa Ranking In Java interessiert sein. It shows you how to use DOM to parse the Alexa XML result.