Mon StAX (Java)

Mémorandum pour vous-même StAX utilise XMLStreamReader ou XMLEventReader pour lire XML. Cette fois, j'ai utilisé XMLStreamReader.

La différence entre l'utilisation de SAX, StAX et DOM en premier lieu

Ici sera utile. Ce a également été utile.

Exemple de XML utilisé cette fois

Nous emprunterons le XML des poèmes japonais sur le site ici.

<?xml version="1.0" encoding="UTF-8"?>
<Manyoshu>
 <Numéro de volume="1">
	<chanson>
		<Numéro de morceau>8</Numéro de morceau>
		<Original>Jukudatsu 尓 marin Sebu Noboru Tsukiwaiter Shioge Kana Hinuma de nos jours</Original>
		<auteur>Roi Nakuda(Nukata no Ookimi)</auteur>
		<en train de lire>Jukudatsu(Venir à)Au bateau(Funa)Quand j'y monte, si j'attends un mois, la marée ne viendra pas, maintenant je ramer(Cette)Faire sortir(je)Dena</en train de lire>
		<image>image/m0008.jpg</image>
		<sens>Jukudatsu(Venir à)Puis, alors que j'attendais que la lune quitte le navire, la marée s'est finalement améliorée. Il est maintenant temps de mettre les voiles.</sens>
	</chanson>
	<chanson>
		<Numéro de morceau>20</Numéro de morceau>
		<Original>Akane Kusashi Takera Maeno est mort Yukio Nomori Nomoriya Kimiyuki Sode Nunryu</Original>
		<auteur>Roi Nakuda(Nukata no Ookimi)</auteur>
		<en train de lire>garance(Akane)Comme prévu, le champ standard à destination de Shino(Shimeno)Allez, garde des champs(Nomori)Ne regarde pas, tu secoue ta manche</en train de lire>
		<image>image/m0020.jpg</image>
		<sens>Dans le domaine de Shino, le territoire de l'empereur Tenchi (rempli d'une lumière plus folle), oh, vous pouvez tellement secouer votre manche et le garde du champ peut vous voir.</sens>
	</chanson>
	<chanson>
		<Numéro de morceau>23</Numéro de morceau>
		<Original>Tir à Uchima 乎 Mao Ou Shiramizuro Yuya, etc.</Original>
		<auteur>auteur不明</auteur>
		<en train de lire>Chanvre(Alors), Comme un(Mino)Roi de(Ohokimi), Matelot(Ama)Nareya, Ira(Irago)Île, Tamamo(Tamamo)Tondre</en train de lire>
		<image>image/m0023.jpg</image>
		<sens>Asagu(Mino)Roi de(Ohokimi)Sama est un marin(Ama)c'est ça,(Non, tu ne l'as pas)Vous prenez les algues de l'île d'Ira</sens>
	</chanson>
	<chanson>
		<Numéro de morceau>24</Numéro de morceau>
		<Original>Sora 蝉 yuki Life 蝎 Somi Namiyosho Hama Ira Yukino Shimayuki Tamamo 苅 Nourriture</Original>
		<auteur>auteur不明</auteur>
		<en train de lire>Déprimé, épargné par la vie, mouillé par les vagues, Ira(Irago)Île, Tamamo(Tamamo)Fauchage(Ou)Nourriture(Est)Mu</en train de lire>
		<image>image/m0024.jpg</image>
		<sens>Ira, en se mouillant avec les vagues(Irago)Je prends les algues de l'île et les mange ...(Mino)Roi de(Ohokimi)C'est une chanson que les habitants de l'île ont chantée lorsqu'ils ont entendu la chanson qu'ils ont chantée lorsqu'ils ont été envoyés sur l'île d'Ira.</sens>
	</chanson>
	<chanson>
		<Numéro de morceau>28</Numéro de morceau>
		<Original>Métaphore du printemps Yoshiyuki Natsurai Shiro Myo Nou Yui Tennoka Raiyama</Original>
		<auteur>Empereur Mochito(Jito Tenno)</auteur>
		<en train de lire>C'est passé le printemps et l'été arrive(Shirotae)Séchage des vêtements et paradis(Pluie)Montagne parfumée(Kaguyama)</en train de lire>
		<image>image/m0028.jpg</image>
		<sens>Il semble que le printemps soit passé et que l'été soit arrivé. Mystère blanc(Shirotae)Les vêtements sont Kakuyama(Kaguyama)Je peux le voir.</sens>
	</chanson>
	<chanson>
		<Numéro de morceau>37</Numéro de morceau>
		<Original>Satoshi Kazumi Yoshino Non Kawayuki Tokiruno Absolument Mukyu Revenge</Original>
		<auteur>Kakimoto Maro(Hitomaro sous l'huître)</auteur>
		<en train de lire>Vous pouvez le voir, mais vous ne vous en lassez jamais.(Tokoname)Je regarde à nouveau le bord sans faute</en train de lire>
		<image>image/m0037.jpg</image>
		<sens>Peu importe le nombre de fois que vous le regardez, vous ne vous lasserez jamais.(Tokoname)Allons le voir encore et encore sans interruption.</sens>
	</chanson>
 </rouleau>
</Manyoshu>


Code complet

import java.nio.file.Paths;
import java.io.FileInputStream;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamConstants;

public class StAXSample{
    public static void main(String args[]) throws Exception {
        XMLStreamReader reader = null;
    
        try{
            XMLInputFactory factory = XMLInputFactory.newInstance();
            reader = factory.createXMLStreamReader(new FileInputStream(Paths.get("waka.xml").toFile()));

            String tagName = null;
            String content = null;

            while(reader.hasNext()){
                int eventType = reader.next();

                switch(eventType){
                    case XMLStreamConstants.START_ELEMENT:
                        tagName = reader.getName().getLocalPart();
                        break;

                    case XMLStreamConstants.CHARACTERS:
                        content = reader.getText();
                        break;
                        
                    case XMLStreamConstants.END_ELEMENT:
                        if(reader.getName().getLocalPart().equals("chanson")){
                        break;        
                        }else if(reader.getName().getLocalPart().equals("rouleau")){
                        break;        
                        }else if(reader.getName().getLocalPart().equals("Manyoshu")){
                        break;        
                        }
                        System.out.println(tagName + " : " + content);
                        if (reader.getName().getLocalPart().equals("sens")){
                            System.out.println("==================================================");
                        break;
                        }
                    default:
                        break;
                }
            }
        }finally{
            if(reader != null){
                reader.close();
            }
        }
    }
}

Résultat de sortie

Numéro de morceau: 8
Original:Jukudatsu 尓 marin Sebu Noboru Tsukiwaiter Shioge Kana Hinuma de nos jours
auteur:Roi Nakuda(Nukata no Ookimi)
en train de lire:Jukudatsu(Venir à)Au bateau(Funa)Quand j'y monte, si j'attends un mois, la marée ne viendra pas, maintenant je ramer(Cette)Faire sortir(je)Dena
image: image/m0008.jpg
sens:Jukudatsu(Venir à)Puis, alors que j'attendais que la lune quitte le navire, la marée s'est finalement améliorée. Il est maintenant temps de mettre les voiles.
==================================================
Numéro de morceau: 20
Original:Akane Kusashi Takera Maeno est mort Yukio Nomori Nomoriya Kimiyuki Sode Nunryu
auteur:Roi Nakuda(Nukata no Ookimi)
en train de lire:garance(Akane)Comme prévu, le champ standard à destination de Shino(Shimeno)Allez, garde des champs(Nomori)Ne regarde pas, tu secoue ta manche
image: image/m0020.jpg
sens:Shino (plein de lumière de couleur plus folle), dans le champ du territoire de l'empereur Tenchi, oh, vous pouvez tellement secouer votre manche et le garde du champ peut vous voir.
==================================================
Numéro de morceau: 23
Original:Tir à Uchima 乎 Mao Ou Shiramizuro Yuya, etc.
auteur:Auteur inconnu
en train de lire:Chanvre(Alors), Comme un(Mino)Roi de(Ohokimi), Matelot(Ama)Nareya, Ira(Irago)Île, Tamamo(Tamamo)Tondre
image: image/m0023.jpg
sens:Asagu(Mino)Roi de(Ohokimi)Sama est un marin(Ama)c'est ça,(Non, tu ne l'as pas)Vous prenez les algues de l'île d'Ira
==================================================
Numéro de morceau: 24
Original:Sora 蝉 yuki Life 蝎 Somi Namiyosho Hama Ira Yukino Shimayuki Tamamo 苅 Nourriture
auteur:Auteur inconnu
en train de lire:Déprimé, épargné par la vie, mouillé par les vagues, Ira(Irago)Île, Tamamo(Tamamo)Fauchage(Ou)Nourriture(Est)Mu
image: image/m0024.jpg
sens:Ira, en se mouillant avec les vagues(Irago)Je prends les algues de l'île et les mange ...(Mino)Roi de(Ohokimi)C'est une chanson que les habitants de l'île ont chantée lorsqu'ils ont entendu la chanson qu'ils ont chantée lorsqu'ils ont été envoyés sur l'île d'Ira.
==================================================
Numéro de morceau: 28
Original:Métaphore du printemps Yoshiyuki Natsurai Shiro Myo Nou Yui Tennoka Raiyama
auteur:Empereur Mochito(Jito Tenno)
en train de lire:C'est passé le printemps et l'été arrive(Shirotae)Séchage des vêtements et paradis(Pluie)Montagne parfumée(Kaguyama)
image: image/m0028.jpg
sens:Il semble que le printemps soit passé et que l'été soit arrivé. Mystère blanc(Shirotae)Les vêtements sont Kakuyama(Kaguyama)Je peux le voir.
==================================================
Numéro de morceau: 37
Original:Satoshi Kazumi Yoshino Non Kawayuki Tokiruno Absolument Mukyu Revenge
auteur:Kakimoto Maro(Hitomaro sous l'huître)
en train de lire:Vous pouvez le voir, mais vous ne vous en lassez jamais.(Tokoname)Je regarde à nouveau le bord sans faute
image: image/m0037.jpg
sens:Peu importe le nombre de fois que vous le regardez, vous ne vous lasserez jamais.(Tokoname)Allons le voir encore et encore sans interruption.
==================================================

Commentaire partiel

Import de bibliothèque

import java.nio.file.Paths;
import java.io.FileInputStream;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamConstants;

Lire le fichier XML

public class StAXSample{
    public static void main(String args[]) throws Exception {
        XMLStreamReader reader = null;

        try{
            //Générer XMLInputFactory
            XMLInputFactory factory = XMLInputFactory.newInstance();
            //Obtenez le contenu du fichier dans XMLStreamReader
            reader = factory.createXMLStreamReader(new FileInputStream(Paths.get("waka.xml").toFile()));
            //Variables pour l'impression
            String tagName = null;
            String content = null;

reader = factory.createXMLStreamReader (new FileInputStream (Paths.get (" file.xml "). ToFile ())); est comme un ensemble qui est décidé par cette série de procédures. Pour expliquer brièvement -Spécifiez le fichier à lire avec Paths.get ([filena_name) .toFile ()). Compatibilité des chemins et des fichiers. -Pour diffuser avec FileInputStream -CreateXMLStreamReader crée une instance de XMLStreamReader, mais l'argument doit être un flux.

Type d'événement et branche conditionnelle

            //S'il y a le prochain événement
            while(reader.hasNext()){
                //Obtenez le type de l'événement suivant
                int eventType = reader.next();
                //Formule de cas pour chaque événement
                switch(eventType){
                    //Si c'est une balise de début
                    case XMLStreamConstants.START_ELEMENT:
                        tagName = reader.getName().getLocalPart();
                        break;
                    //Si c'était un texte
                    case XMLStreamConstants.CHARACTERS:
                        content = reader.getText();
                        break;
                    //S'il s'agit d'une balise de fin
                    case XMLStreamConstants.END_ELEMENT:
                        //Branche conditionnelle par nom d'élément
                        if(reader.getName().getLocalPart().equals("chanson")){
                        break;        
                        }else if(reader.getName().getLocalPart().equals("rouleau")){
                        break;        
                        }else if(reader.getName().getLocalPart().equals("Manyoshu")){
                        break;        
                        }
                        System.out.println(tagName + " : " + content);
                        if (reader.getName().getLocalPart().equals("sens")){
                            System.out.println("==================================================");
                        break;
                        }
                    default:
                        break;
                }
            }

Fondamentalement, la méthode hasNext de l'objet XMLInputStreamReader détermine s'il y a l'événement suivant, S'il y en a, le flux de lecture de l'événement suivant avec la méthode next.

Fermer XMLInputStreamReader

}finally{
            if(reader != null){
                reader.close();
            }
        }
    }
}

Recommended Posts

Mon StAX (Java)
Mon DOM (Java)
Ma référence Java
Mon modèle DAO (Java)
Ma note d'étude (Java)
Java
Java
Ma note de profit: Présentation de Java à Ubuntu
Apprendre Java (0)
Mes réflexions sur la méthode d'égalité (Java)
Étudier Java ―― 3
[Java] tableau
[Java] Annotation
Module [Java]
Tableau Java
Astuces Java, astuces
Méthodes Java
Méthode Java
java (constructeur)
Tableau Java
[Java] ArrayDeque
java (remplacement)
java (méthode)
Journée Java 2018
java (tableau)
Java statique
Sérialisation Java
JAVA payé
Java (ensemble)
tri shell java
Étudier Java -5
java réfléchissant 获 获 举
java (interface)
Mémorandum Java
Étudier Java ―― 1
[Java] Array
[Java] Polymorphisme
Étudier Java # 0
Revue Java
framework java
Fonctionnalités Java
Fonctionnalités Java
java débutant 3
Mémo Java
java (encapsulation)
Héritage Java
[Java] Surcharge
Les bases de Java
Décompiler Java
[Java] Annotation
note java
java débutant
Java (add2)
JAVA (Carte)
interface [java]
Les bases de Java
Méthodes Java
Journal de Java
[Java] enum (type d'énumération)
[Java] FizzBuzzCounter