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.