Maison > Article > développement back-end > Tutoriel Java et XML (6) Utilisation de JDOM pour analyser les fichiers XML
JDOM fournit une très excellente API Java XML pour lire, modifier et générer plus facilement des documents XML. JDOM fournit également des classes wrapper permettant aux utilisateurs de choisir des implémentations spécifiques parmi SAX, DOM, l'analyse d'événements STAX et l'analyse de flux STAX.
Dans ce tutoriel, nous apprenons à utiliser JDOM pour lire les informations d'un fichier XML et les convertir en objets Java.
JDOM ne fait pas partie du JDK standard, donc pour utiliser JDOM, vous devez télécharger le package binaire JDOM depuis le site officiel. Après le téléchargement, ajoutez le package JDOM Jar au chemin de classe du projet.
JDOM fournit une classe wrapper nous permettant de choisir l'API d'analyse XML sous-jacente. Il fournit quatre classes importantes que nous pouvons utiliser pour obtenir l'objet Document JDOM. L'objet Document JDOM fournit des méthodes très utiles pour obtenir l'élément racine, la liste des éléments enfants, les valeurs d'attribut, etc.
Classes importantes de JDOM : org.jdom2.input.DOMBuilder:
Utilisez le mécanisme d'analyse DOM pour analyser le XML et le convertir en un objet Document JDOM. org.jdom2.input.SAXBuilder:
Utilisez le mécanisme d'analyse SAX pour analyser le XML et le convertir en document JDOM. Les fonctions de org.jdom2.input.StAXEventBuilder
et org.jdom2.input.StAXStreamBuilder
sont similaires aux deux précédentes et ne seront pas décrites à nouveau. org.jdom2.Document
L'objet JDOM Document fournit des méthodes utiles pour obtenir l'élément racine, lire ou modifier le contenu de l'élément, etc. Nous l'utiliserons pour obtenir l'élément racine de XML. org.jdom2.Document
fournit des méthodes utiles pour obtenir la collection d'éléments enfants, obtenir la valeur de l'élément enfant, obtenir la valeur de l'attribut et d'autres opérations.
Ensuite, nous commençons à utiliser le programme case pour lire le fichier XML et générer des objets Java.
employees.xml
<?xml version="1.0" encoding="UTF-8"?><Employees> <Employee id="1"> <age>29</age> <name>Pankaj</name> <gender>Male</gender> <role>Java Developer</role> </Employee> <Employee id="2"> <age>35</age> <name>Lisa</name> <gender>Female</gender> <role>CEO</role> </Employee> <Employee id="3"> <age>40</age> <name>Tom</name> <gender>Male</gender> <role>Manager</role> </Employee></Employees>
Ce fichier XML stocke les informations sur les employés. Nous utilisons la classe Employee pour représenter les employés.
package com.journaldev.xml;public class Employee { private int id; private String name; private String gender; private int age; private String role; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } @Override public String toString() { return "Employee:: ID="+this.id+" Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender + " Role=" + this.role; } }
Utilisez ensuite DOMBuilder dans le programme de test pour lire le fichier XML et générer une collection d'objets Employee.
JDOMXMLReader.java
package com.journaldev.xml.jdom; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; 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 javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import org.jdom2.Element; import org.jdom2.JDOMException; import org.jdom2.input.DOMBuilder; import org.jdom2.input.SAXBuilder; import org.jdom2.input.StAXEventBuilder; import org.jdom2.input.StAXStreamBuilder; import org.w3c.dom.Document; import org.xml.sax.SAXException; import com.journaldev.xml.Employee; public class JDOMXMLReader { public static void main(String[] args) { final String fileName = "/Users/pankaj/employees.xml"; org.jdom2.Document jdomDoc; try { //we can create JDOM Document from DOM, SAX and STAX Parser Builder classes jdomDoc = useDOMParser(fileName); Element root = jdomDoc.getRootElement(); List<Element> empListElements = root.getChildren("Employee"); List<Employee> empList = new ArrayList<>(); for (Element empElement : empListElements) { Employee emp = new Employee(); emp.setId(Integer.parseInt(empElement.getAttributeValue("id"))); emp.setAge(Integer.parseInt(empElement.getChildText("age"))); emp.setName(empElement.getChildText("name")); emp.setRole(empElement.getChildText("role")); emp.setGender(empElement.getChildText("gender")); empList.add(emp); } //lets print Employees list information for (Employee emp : empList) System.out.println(emp); } catch (Exception e) { e.printStackTrace(); } } //Get JDOM document from DOM Parser private static org.jdom2.Document useDOMParser(String fileName) throws ParserConfigurationException, SAXException, IOException { //creating DOM Document DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder; dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(new File(fileName)); DOMBuilder domBuilder = new DOMBuilder(); return domBuilder.build(doc); } }
Comme vous pouvez le voir, j'utilise ici la classe wrapper d'analyse DOM pour obtenir l'objet Document JDOM.
Exécutez la sortie du programme :
Employee:: ID=1 Name=Pankaj Age=29 Gender=Male Role=Java DeveloperEmployee:: ID=2 Name=Lisa Age=35 Gender=Female Role=CEOEmployee:: ID=3 Name=Tom Age=40 Gender=Male Role=Manager
Nous pouvons également utiliser les mécanismes d'analyse SAX et STAX pour terminer. Nous pouvons utiliser la méthode suivante pour terminer :
/Get JDOM document from SAX Parserprivate static org.jdom2.Document useSAXParser(String fileName) throws JDOMException, IOException { SAXBuilder saxBuilder = new SAXBuilder(); return saxBuilder.build(new File(fileName)); } //Get JDOM Document from STAX Stream Parser or STAX Event Parserprivate static org.jdom2. Document useSTAXParser(String fileName, String type) throws FileNotFoundException, XMLStreamException, JDOMException{ if(type.equalsIgnoreCase("stream")){ StAXStreamBuilder staxBuilder = new StAXStreamBuilder(); XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(new FileInputStream(fileName)); return staxBuilder.build(xmlStreamReader); } StAXEventBuilder staxBuilder = new StAXEventBuilder(); XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(new FileInputStream(fileName)); return staxBuilder.build(xmlEventReader); }
Exécuter le. le programme obtiendra le même résultat. Le résultat est dû au fait que nous utilisons simplement des classes wrapper différentes, mais les objets du document JDOM obtenus sont les mêmes.
L'avantage d'utiliser JDOM est que nous pouvons facilement changer le mécanisme d'analyse sous-jacent sans changer le code de traitement.
JDOM fournit une très excellente API Java XML pour lire, modifier et générer plus facilement des documents XML. JDOM fournit également des classes wrapper permettant aux utilisateurs de choisir des implémentations spécifiques parmi SAX, DOM, l'analyse d'événements STAX et l'analyse de flux STAX.
Dans ce tutoriel, nous apprenons à utiliser JDOM pour lire les informations d'un fichier XML et les convertir en objets Java.
JDOM ne fait pas partie du JDK standard, donc pour utiliser JDOM, vous devez télécharger le package binaire JDOM depuis le site officiel. Après le téléchargement, ajoutez le package JDOM Jar au chemin de classe du projet.
JDOM fournit une classe wrapper nous permettant de choisir l'API d'analyse XML sous-jacente. Il fournit quatre classes importantes que nous pouvons utiliser pour obtenir l'objet Document JDOM. L'objet Document JDOM fournit des méthodes très utiles pour obtenir l'élément racine, la liste des éléments enfants, les valeurs d'attribut, etc.
Classes importantes de JDOM : org.jdom2.input.DOMBuilder:
Utilisez le mécanisme d'analyse DOM pour analyser le XML et le convertir en un objet Document JDOM. org.jdom2.input.SAXBuilder:
Utilisez le mécanisme d'analyse SAX pour analyser le XML et le convertir en document JDOM. Les fonctions de org.jdom2.input.StAXEventBuilder
et org.jdom2.input.StAXStreamBuilder
sont similaires aux deux précédentes et ne seront pas décrites à nouveau. org.jdom2.Document
L'objet JDOM Document fournit des méthodes utiles pour obtenir l'élément racine, lire ou modifier le contenu de l'élément, etc. Nous l'utiliserons pour obtenir l'élément racine de XML. org.jdom2.Document
fournit des méthodes utiles pour obtenir la collection d'éléments enfants, obtenir la valeur de l'élément enfant, obtenir la valeur de l'attribut et d'autres opérations.
Ensuite, nous commençons à utiliser le programme case pour lire le fichier XML et générer des objets Java.
employees.xml
<?xml version="1.0" encoding="UTF-8"?><Employees> <Employee id="1"> <age>29</age> <name>Pankaj</name> <gender>Male</gender> <role>Java Developer</role> </Employee> <Employee id="2"> <age>35</age> <name>Lisa</name> <gender>Female</gender> <role>CEO</role> </Employee> <Employee id="3"> <age>40</age> <name>Tom</name> <gender>Male</gender> <role>Manager</role> </Employee></Employees>
Ce fichier XML stocke les informations sur les employés. Nous utilisons la classe Employee pour représenter les employés.
package com.journaldev.xml; public class Employee { private int id; private String name; private String gender; private int age; private String role; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } @Override public String toString() { return "Employee:: ID="+this.id+" Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender + " Role=" + this.role; } }
Utilisez ensuite DOMBuilder dans le programme de test pour lire le fichier XML et générer une collection d'objets Employee.
JDOMXMLReader.java
package com.journaldev.xml.jdom; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; 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 javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import org.jdom2.Element;import org.jdom2.JDOMException; import org.jdom2.input.DOMBuilder; import org.jdom2.input.SAXBuilder; import org.jdom2.input.StAXEventBuilder; import org.jdom2.input.StAXStreamBuilder; import org.w3c.dom.Document; import org.xml.sax.SAXException; import com.journaldev.xml.Employee; public class JDOMXMLReader { public static void main(String[] args) { final String fileName = "/Users/pankaj/employees.xml"; org.jdom2.Document jdomDoc; try { //we can create JDOM Document from DOM, SAX and STAX Parser Builder classes jdomDoc = useDOMParser(fileName); Element root = jdomDoc.getRootElement(); List<Element> empListElements = root.getChildren("Employee"); List<Employee> empList = new ArrayList<>(); for (Element empElement : empListElements) { Employee emp = new Employee(); emp.setId(Integer.parseInt(empElement.getAttributeValue("id"))); emp.setAge(Integer.parseInt(empElement.getChildText("age"))); emp.setName(empElement.getChildText("name")); emp.setRole(empElement.getChildText("role")); emp.setGender(empElement.getChildText("gender")); empList.add(emp); } //lets print Employees list information for (Employee emp : empList) System.out.println(emp); } catch (Exception e) { e.printStackTrace(); } } //Get JDOM document from DOM Parser private static org.jdom2.Document useDOMParser(String fileName) throws ParserConfigurationException, SAXException, IOException { //creating DOM Document DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder; dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(new File(fileName)); DOMBuilder domBuilder = new DOMBuilder(); return domBuilder.build(doc); } }
Comme vous pouvez le voir, j'utilise ici la classe wrapper d'analyse DOM pour obtenir l'objet Document JDOM.
Exécutez la sortie du programme :
Employee:: ID=1 Name=Pankaj Age=29 Gender=Male Role=Java DeveloperEmployee:: ID=2 Name=Lisa Age=35 Gender=Female Role=CEOEmployee:: ID=3 Name=Tom Age=40 Gender=Male Role=Manager
Nous pouvons également utiliser les mécanismes d'analyse SAX et STAX pour terminer. Nous pouvons utiliser la méthode suivante pour terminer :
/Get JDOM document from SAX Parserprivate static org.jdom2.Document useSAXParser(String fileName) throws JDOMException, IOException { SAXBuilder saxBuilder = new SAXBuilder(); return saxBuilder.build(new File(fileName)); } //Get JDOM Document from STAX Stream Parser or STAX Event Parserprivate static org.jdom2.Document useSTAXParser(String fileName, String type) throws FileNotFoundException, XMLStreamException, JDOMException{ if(type.equalsIgnoreCase("stream")){ StAXStreamBuilder staxBuilder = new StAXStreamBuilder(); XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(new FileInputStream(fileName)); return staxBuilder.build(xmlStreamReader); } StAXEventBuilder staxBuilder = new StAXEventBuilder(); XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(new FileInputStream(fileName)); return staxBuilder.build(xmlEventReader); }
Exécuter le. le programme obtiendra le même résultat. Le résultat est dû au fait que nous utilisons simplement des classes wrapper différentes, mais les objets du document JDOM obtenus sont les mêmes.
L'avantage d'utiliser JDOM est que nous pouvons facilement changer le mécanisme d'analyse sous-jacent sans changer le code de traitement.
Ce qui précède est le contenu du didacticiel Java&Xml (6) utilisant JDOM pour analyser les fichiers XML. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !