[JAVA] Essayez de lire XML avec JDOM

Qu'est-ce que DOM

Une bibliothèque pratique pour lire du XML. Cliquez ici pour un aperçu détaillé (https://qiita.com/bocc/items/5d7213431e5a5e3a67e9)

Il fonctionne sous Spring MVC, donc il n'est pas du tout polyvalent. Je ne connais pas un environnement si spécial! Personnes veuillez vous rendre ici

Utilisateurs de printemps Il semble que Spring IO gère les dépendances, alors utilisons-le immédiatement.

Ajouter une bibliothèque à Maven

pom.xml


	<!-- JDOM -->
	<dependency>
	    <groupId>org.jdom</groupId>
	    <artifactId>jdom2</artifactId>
	</dependency>

Comme toujours, la gestion des versions est Spring IO.

Essayez de lire XML.

En supposant un service Web (même si ce n'est pas obligatoire) Lisons le XML.

Ceci est le XML utilisé pour l'exemple

sample.xml



<?xml version="1.0" encoding="UTF-8"?>
<employees>
	<employee>
		<name>Yamamoto</name>
		<class>Sales Section1</class>
		<sex>male</sex>
		<age>10</age>
	</employee>

	<employee>
		<name>Hanako</name>
		<class>Sales Section2</class>
		<sex>female</sex>
		<age>20</age>
	</employee>
	
		<employee>
		<name>Taniguchi</name>
		<class>Develop Section2</class>
		<sex>male</sex>
		<age>30</age>
	</employee>

</employees>

Obtenons ceci dans ** src / main / resource **.

DomController.java


	@Autowired
	ResourceLoader resourceLoader;
	
	@RequestMapping(value="/readable")
	public String readable() {
		
		//Acquisition de fichiers
		Resource resource = resourceLoader.getResource("classpath:sample.xml");
		
		Document doc = null;
		Element root = null;
		
		//Obtenez Xml
		try {
			doc = new SAXBuilder().build(resource.getFile());
			root = doc.getRootElement();
			
			} catch (JDOMException e) {
				System.out.println(e);
			} catch (IOException e) {
				//Bloc de capture généré automatiquement TODO
				System.out.println(e);
			}

Désormais, le code Spring sera mélangé S'il s'agit d'un échantillon normal, ** resource.getFile () ** sera ** new File ("hogehoge.xml") **

Que fais tu

DomController.java


			doc = new SAXBuilder().build(resource.getFile());
			root = doc.getRootElement();

J'obtiens juste l'élément racine ici.

Essayez d'obtenir un élément enfant

DomController.java


		//Récupérer les éléments enfants de Xml (pas les éléments petits-enfants)
		List<Element> list = root.getChildren();

Cette fois, il y a 3 éléments enfants, donc ce sera une liste.

Essayez d'obtenir la valeur de l'élément petit-enfant.

Essayez d'obtenir la valeur du nom sous l'employé. Vous pouvez également obtenir la valeur de l'attribut en remplaçant ** getValue () ** par ** getAttribute ("hoge_name") **. La boucle augmente à mesure que le nombre de petits-enfants et arrière-petits-enfants augmente. (Je pense que c'est une technique pour rechercher des "arbres" à partir d'ici.)

DomController.java


		List<String> result = new ArrayList<String>();
		
		//Boucle pour obtenir des éléments petits-enfants de Xml
		for(Element e : list) {
			if(e.getName().compareTo("employee") == 0) {
				result.add(e.getChild("name").getValue());
			}
		}
		
		//Boucle pour recracher l'élément récupéré sur la console
		for(String name : result) {
			System.out.println(name);
		}

Ceci est le système final terminé

DomController.java


@RestController
public class DomController {

	@Autowired
	ResourceLoader resourceLoader;
	
	@RequestMapping(value="/readable")
	public String readable() {
		
		//Acquisition de fichiers
		Resource resource = resourceLoader.getResource("classpath:sample.xml");
		
		Document doc = null;
		Element root = null;
		
		//Obtenez Xml
		try {
			doc = new SAXBuilder().build(resource.getFile());
			root = doc.getRootElement();
			
			} catch (JDOMException e) {
				System.out.println(e);
			} catch (IOException e) {
				//Bloc de capture généré automatiquement TODO
				System.out.println(e);
			}
	
		//Récupérer les éléments enfants de Xml (pas les éléments petits-enfants)
		List<Element> list = root.getChildren();
		
		List<String> result = new ArrayList<String>();
		
		//Boucle pour obtenir des éléments petits-enfants de Xml
		for(Element e : list) {
			if(e.getName().compareTo("employee") == 0) {
				result.add(e.getChild("name").getValue());
			}
		}
		
		//Boucle pour recracher l'élément récupéré sur la console
		for(String name : result) {
			System.out.println(name);
		}
	
        return null;
	}

Il n'y a aucun problème avec @Controller même si ce n'est pas @RestController.

Essayez de bouger

Accédons-y depuis un navigateur et vérifions le fonctionnement.

image.png

Écran de la console

image.png

Vous pouvez voir que la valeur de name est obtenue à partir de XML.

Recommended Posts

Essayez de lire XML avec JDOM
Essayez DI avec Micronaut
Essayez de créer avec Trailblazer
Essayez WebSocket avec jooby
Essayez la connexion DB avec Java
Essayez gRPC avec Java, Maven
Essayez d'exécuter cloudera manager avec docker
Essayez d'implémenter recaptcha avec Jetty intégré.
Essayez de manipuler les tableaux PostgreSQL avec JDBC
Essayez d'utiliser Redis avec Java (jar)
Essayez l'analyse syntaxique des phrases anglaises avec Stanford CoreNLP
Essayez la communication bidirectionnelle avec gRPC Java