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.
pom.xml
<!-- JDOM -->
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
</dependency>
Comme toujours, la gestion des versions est Spring IO.
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.
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 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);
}
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.
Accédons-y depuis un navigateur et vérifions le fonctionnement.
Écran de la console
Vous pouvez voir que la valeur de name est obtenue à partir de XML.
Recommended Posts