Comment lire un fichier XML en Java - (Analyseur DOM)
Dans ce tutoriel, nous allons vous montrer comment lire un fichier XML viaDOM XML parser. DOM parser parses the entire XML document and loads it into memory; then models it in a “TREE” structure for easy traversal or manipulation.
En bref, il transforme un fichier XML enDOM ou en arborescence, et vous devez parcourir un nœud par nœud pour obtenir ce que vous voulez.
What is Node?
Dans le DOM, tout dans un document XML est un nœud,read this.
L'analyseur DOMWarning
est lent et consomme beaucoup de mémoire lorsqu'il charge un document XML contenant beaucoup de données. Veuillez considérer l'analyseur SAX comme une solution, SAX est plus rapide que DOM et utilise moins de mémoire.
1. Exemple d'analyseur DOM XML
Cet exemple vous montre comment obtenir le nœud par «nom» et afficher la valeur.
/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();
}
}
}
Résultat
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. Boucle du nœud
Cet exemple lit le même "staff.xml", et vous montre comment boucler le nœud un par un, et imprimer le nom et la valeur du nœud, ainsi que l'attribut le cas échéant.
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]");
}
}
}
}
Résultat :
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
Vous pouvez vous intéresser à ceHow to get Alexa Ranking
In Java. It shows you how to use DOM to parse the Alexa XML result.