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.