IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Récupération de valeurs balises vers fichier texte


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Points : 45
    Points
    45
    Par défaut Récupération de valeurs balises vers fichier texte
    Bonjour a tous,

    sur un projet je cherche a récupérer des valeurs dans des tags et en faire un fichier texte.
    Je me suis donc inspiré d'un ancien code mais je n'arrive avec celui-ci qu'a récupérer tout ou rien

    voici mon xml:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    <?xml version="1.0" encoding="UTF-8"?>
    <AIXM-Snapshot created="2019-01-08T11:04:34.997+01:00" origin="Sia-France" version="4.5" effective="2019-02-28T00:00:00.000+01:00">
        <Org>
            <OrgUid mid="1520776">
                <txtName>POLYNESIE FRANCAISE</txtName>
            </OrgUid>
            <codeId>NT</codeId>
            <codeType>O</codeType>
        </Org>
     
        <Abd>
            <AbdUid mid="1569504">
                <AseUid mid="1561979">
                    <codeType>D-OTHER</codeType>
                    <codeId>LF9013</codeId>
                </AseUid>
            </AbdUid>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>470440.00N</geoLat>
                <geoLong>0020137.00E</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
        </Abd>
        <Abd>
            <AbdUid mid="1569508">
                <AseUid mid="1561977">
                    <codeType>D-OTHER</codeType>
                    <codeId>LF6366</codeId>
                </AseUid>
            </AbdUid>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>474538.00N</geoLat>
                <geoLong>0032624.00W</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
        </Abd>
        <Abd>
            <AbdUid mid="1568676">
                <AseUid mid="1561155">
                    <codeType>P</codeType>
                    <codeId>SO3</codeId>
                </AseUid>
            </AbdUid>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>050630.00N</geoLat>
                <geoLong>0523140.00W</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>045930.00N</geoLat>
                <geoLong>0523614.00W</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
            <Avx>
                <codeType>CWA</codeType>
                <geoLat>051330.00N</geoLat>
                <geoLong>0530100.00W</geoLong>
                <codeDatum>WGE</codeDatum>
                <geoLatArc>051815.00N</geoLatArc>
                <geoLongArc>0525005.00W</geoLongArc>
                <valRadiusArc>11.5</valRadiusArc>
                <uomRadiusArc>NM</uomRadiusArc>
            </Avx>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>053000.00N</geoLat>
                <geoLong>0525200.00W</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>051635.00N</geoLat>
                <geoLong>0523520.00W</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
        </Abd>
        <Abd>
            <AbdUid mid="1569516">
                <AseUid mid="1561903">
                    <codeType>D-OTHER</codeType>
                    <codeId>LF984</codeId>
                </AseUid>
            </AbdUid>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>433629.00N</geoLat>
                <geoLong>0064206.00E</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
        </Abd>
        <Abd>
            <AbdUid mid="1569568">
                <AseUid mid="1562817">
                    <codeType>R</codeType>
                    <codeId>LFR10</codeId>
                </AseUid>
            </AbdUid>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>493555.00N</geoLat>
                <geoLong>0011302.00W</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>492939.00N</geoLat>
                <geoLong>0002154.00E</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>492307.00N</geoLat>
                <geoLong>0002732.00E</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>491130.00N</geoLat>
                <geoLong>0002100.00E</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>491518.00N</geoLat>
                <geoLong>0002635.00W</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>491701.00N</geoLat>
                <geoLong>0011756.00W</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>492403.00N</geoLat>
                <geoLong>0012832.00W</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
            <Avx>
                <codeType>GRC</codeType>
                <geoLat>492937.00N</geoLat>
                <geoLong>0012324.00W</geoLong>
                <codeDatum>WGE</codeDatum>
            </Avx>
        </Abd>
    </AIXM-Snapshot>

    De ce XML je desire ne récupérer que les valeurs dans les balises codeId et les balises geoLAT geoLong l'ensemble dans chaque balise Abd et enfant Avx

    pour cela j'ai ce code que j'ai essayé d'adapter a mon besoin (voir les commentaires) mais je n'y arrive pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    package extraction_xml;
     
    import java.io.*;
    import javax.xml.xpath.*;
    import org.w3c.dom.Document;
    import org.xml.sax.SAXException;
    import javax.xml.namespace.*; 
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
     
    public class Extraction1 {
     
    	static File fichier;
     
    	// Constructeur 
    	public Extraction1 (String url){
    		fichier = new File(url);
    	}
     
    	// Méthodes 
    	/**
             * créer une instance de XPath et lui faire évaluer une XPathExpression
         * @param file
         * @param expression
         * @param expression2
         * @param expression3
         * @param retour
         * @return 
             */
    	public String evaluerDOM(File file, String expression, QName retour){
    		String texteCopie=null;
     
    		try{
    			DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    			DocumentBuilder constructeur = docBuilderFactory.newDocumentBuilder();
    			Document document = constructeur.parse(file);
     
    			//création du XPath 
    			XPathFactory fabrique = XPathFactory.newInstance();
    			XPath xpath = fabrique.newXPath();
     
    			//évaluation de l'expression XPath
    			XPathExpression exp = xpath.compile(expression);
    			NodeList resultat = (NodeList) exp.evaluate(document,XPathConstants.NODESET); // récupère la liste de Node correspondant au xpath 
     
                            /*XPathExpression exp2 = xpath.compile(expression2);
                            NodeList resultat2 = (NodeList) exp2.evaluate(document,XPathConstants.NODESET); // récupère la liste de Node correspondant au xpath
                            
                            /*XPathExpression exp3 = xpath.compile(expression3);
                            NodeList resultat3 = (NodeList) exp3.evaluate(document,XPathConstants.NODESET); // récupère la liste de Node correspondant au xpath
                            */
                            StringBuilder sb=new StringBuilder(); // pour faire la concaténation
     
    			for(int i=0; i<resultat.getLength(); i++) { // parcours
    				if ( i!=0 ) { // pour avoir des séparations entre chaque node, sauf pour le premier
                                        sb.append("--------------------------\n");//ajout d'une ligne de séparation par exemple
                                        //sb.append("\n"); // ajoute une ligne vide 
    				}
                                    //sb.append("name:");//ajout de name devant codeId
                                    //sb.append("\n"); // ajoute une ligne vide
     
                                    sb.append("Zone ").append(i+1).append("");//ajout d'un titre par exemple
     
                                    Node Avx = resultat.item(i); // on récupère le node d'index i 
                                    sb.append(Avx.getTextContent()); // concaténation du texte du node
     
     
     
                            }texteCopie=sb.toString(); // 
    		}catch(XPathExpressionException | ParserConfigurationException | SAXException | IOException xpee){
    		}
     
    		return texteCopie;
    	}
     
    	/**
             * @param args
         * @throws java.io.IOException       */
    	public static void main(String[ ] args) throws IOException {
    		Extraction1 test = new Extraction1("/Users/moi/Desktop/AIXM_test_macro.xml");
                    String resultat = test.evaluerDOM(fichier, "//Avx",XPathConstants.STRING);
                    //String resultat2 = test.evaluerDOM(fichier, "//Abd/Avx/geoLon",XPathConstants.STRING);
     
     
                    File AIP = new File("/Users/moi/Desktop/AIP_test.txt") ;
                try (PrintWriter out = new PrintWriter(new FileWriter(AIP))) {
                    out.write(resultat) ; //écris resultat dans le fichier
                    //out.println(); //fais un retour à la ligne dans le fichier
     
                    out.close() ; //Ferme le flux du fichier, sauvegardant ainsi les données.
                } 
    	}
     
    }
    Or avec celui-ci je n'obtiens que ce qu'il y a dans les balises Avx (par exemple) en totalité.
    en fait je souhaite récupérer le nom plus les coordonnées (sachant qu'il peut y en avoir plusieurs) pour un <Abd>...</Abd>

    Pourriez-vous m'aider s'il vous plait?

    Merci par avance pour vos réponse.
    Amicalement

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    1. Utiliser une bibliothèque comme JDom2 te donnerait un code beaucoup plus simple. Ou StAX, pour lequel j'ai une petite préférence quand je ne veux pas utiliser une bibliothèque externe, d'autant plus que le traitement se fait en stream (sans charger tout le dom en mémoire).
    2. Ton xpath sélectionne les balises Avx puis tu en récupères le textcontent donc tout le texte forcément. Si tu veux une sous-sélection, il te faut pour chaque node sélectionné, sélectionner à l'intérieure les balises qui t'intéressent pour en extraire le texte.
      Tu pourrais utiliser le xpath //Avx/*[self::codeType or self::geoLat or self::geoLong], mais tu aurais une ligne pour chaque data, alors que tu souhaites probablement les regrouper par Avx.


    Avec StAX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    import java.io.IOException;
    import java.io.Reader;
    import java.nio.file.Files;
    import java.nio.file.Paths;
     
    import javax.xml.namespace.QName;
    import javax.xml.stream.XMLInputFactory;
    import javax.xml.stream.XMLStreamException;
    import javax.xml.stream.XMLStreamReader;
    import javax.xml.stream.events.XMLEvent;
     
    public class StaxExemple {
     
    	public static void main(String[] args) {
     
    		String fichier = "AIXM_test_macro.xml";
     
    		QName avx = QName.valueOf("Avx");
    		QName codeType = QName.valueOf("codeType");
    		QName geoLat = QName.valueOf("geoLat");
    		QName geoLong = QName.valueOf("geoLong");
     
    		StringBuilder sb = new StringBuilder();
    		StringBuilder avxsb = new StringBuilder();
    		int zone=0;
    		XMLInputFactory f = XMLInputFactory.newInstance();
    		try {
    			try(Reader reader = Files.newBufferedReader(Paths.get(fichier))) {
    				XMLStreamReader xmlreader = f.createXMLStreamReader( reader);
    				while(xmlreader.hasNext()) {
    				    switch(xmlreader.next()) {
    				    case XMLEvent.START_ELEMENT:
    				    	if ( avx.equals(xmlreader.getName()) ) {
    				    		avxsb.append("Zone ").append(zone++);
    						    boolean grabtext=false;
    							readavx: while(xmlreader.hasNext()) {
    								switch(xmlreader.next()) {
    							    case XMLEvent.START_ELEMENT:
    							    	if ( codeType.equals(xmlreader.getName()) ) {
    							    		avxsb.append(" nom: ");
    							    		grabtext = true;
    							    	}
    							    	else if ( geoLat.equals(xmlreader.getName()) ) {
    							    		avxsb.append(" lat: ");
    							    		grabtext = true;
    							    	}
    							    	else if ( geoLong.equals(xmlreader.getName()) ) {
    							    		avxsb.append(" long: ");
    							    		grabtext = true;
    							    	}
    							    	else {
    							    		grabtext = false;
    							    	}
    							    	break;
    							    case XMLEvent.END_ELEMENT:
    							    	grabtext=false;
    							    	if ( avx.equals(xmlreader.getName())) {
    							    		if ( sb.length()>0 ) sb.append("\n");
    							    		sb.append(avxsb);
    							    		avxsb.setLength(0);
    							    		break readavx;
    							    	}
    							    	break;
    							    case XMLEvent.CHARACTERS:
    							    	if ( grabtext ) {
    							    		avxsb.append(xmlreader.getText());
    							    	}
    							    	break;
    							    }
    							}
    				    	}
    				    }
    				}
    			}
     
    			System.out.println(sb);
     
    			// pour écrire dans un fichier :
    			//Files.writeString(Paths.get("AIP_test.txt"), sb.toString());
     
     
    		} catch (XMLStreamException | IOException e) {
    			e.printStackTrace();
    		}
     
    	}
     
    }
    Exemple avec JDOM2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    import java.io.IOException;
    import java.io.Reader;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.concurrent.atomic.AtomicInteger;
     
    import org.jdom2.Document;
    import org.jdom2.JDOMException;
    import org.jdom2.filter.Filters;
    import org.jdom2.input.SAXBuilder;
     
    public class ExempleJDOM2 {
     
    	public static void main(String[] args) {
     
    		String fichier = "AIXM_test_macro.xml";
     
     
    		try {
     
    			StringBuilder sb = new StringBuilder();
    			AtomicInteger zone=new AtomicInteger();
    			try(Reader reader = Files.newBufferedReader(Paths.get(fichier))) {
     
    				SAXBuilder jdomBuilder = new SAXBuilder();
     
    		        Document jdomDocument = jdomBuilder.build(reader);
     
    		        jdomDocument.getRootElement().getDescendants(Filters.element("Avx"))
    		        .forEach(avx-> {
    		        	if ( sb.length()!=0 ) sb.append("\n");
    		        	sb.append("Zone ").append(zone.incrementAndGet());
     
    		        	sb.append(" nom: ").append( avx.getChildText("codeType"));
    		        	sb.append(" geoLat: ").append( avx.getChildText("geoLat"));
    		        	sb.append(" geoLong: ").append( avx.getChildText("geoLong"));
     
    		        });
     
    		        System.out.println(sb);
     
    			} 
    		}
    		catch (IOException | JDOMException  e) {
    			e.printStackTrace();
    		}
     
    	}
     
    }
    Exemple avec JDOM2/XPath (nécessite jaxen) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    import java.io.IOException;
    import java.io.Reader;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.concurrent.atomic.AtomicInteger;
     
    import org.jdom2.Document;
    import org.jdom2.JDOMException;
    import org.jdom2.filter.Filters;
    import org.jdom2.input.SAXBuilder;
    import org.jdom2.xpath.XPathFactory;
     
    public class ExempleJDOM2XPath {
     
    	public static void main(String[] args) {
     
    		String fichier = "AIXM_test_macro.xml";
     
     
    		try {
     
    			StringBuilder sb = new StringBuilder();
    			AtomicInteger zone=new AtomicInteger();
    			try(Reader reader = Files.newBufferedReader(Paths.get(fichier))) {
     
    				SAXBuilder jdomBuilder = new SAXBuilder();
     
    		        Document jdomDocument = jdomBuilder.build(reader);
     
    		        XPathFactory xpath = XPathFactory.instance();
    		        xpath.compile("//Avx", Filters.element()).evaluate(jdomDocument)
    		        .forEach(avx-> {
     
    		        	if ( sb.length()!=0 ) sb.append("\n");
    		        	sb.append("Zone ").append(zone.incrementAndGet());
     
    		        	sb.append(" nom: ").append( avx.getChildText("codeType"));
    		        	sb.append(" geoLat: ").append( avx.getChildText("geoLat"));
    		        	sb.append(" geoLong: ").append( avx.getChildText("geoLong"));
     
    		        });
     
    		        System.out.println(sb);
     
     
    			} 
    		}
    		catch (IOException | JDOMException  e) {
    			e.printStackTrace();
    		}
     
     
     
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Points : 45
    Points
    45
    Par défaut
    Bonsoir Joeldrigo,

    tout d'abord, merci pour votre réponse. je vous confirme que pour le moment (selon mes premiers résultats suite petite customisation) que votre solution StAX me convient le mieux.
    cependant quand je souhaite l'ecrire dans un fichier, je rencontre un problème avec la dernière ligne
    voici le code tel que je l'ai repris ci-dessous avec la ligne dé-commentée d'écriture dans un fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    package extraction_xml;
     
    import java.io.IOException;
    import java.io.Reader;
    import java.nio.file.Files;
    import java.nio.file.Paths;
     
     
    import javax.xml.namespace.QName;
    import javax.xml.stream.XMLInputFactory;
    import javax.xml.stream.XMLStreamException;
    import javax.xml.stream.XMLStreamReader;
    import javax.xml.stream.events.XMLEvent;
     
    public class StaxExemple {
     
    	public static void main(String[] args) {
     
    		String fichier = "/Users/moi/Desktop/AIXM_test_macro.xml";
     
    		QName avx = QName.valueOf("Abd");
                    QName codeType = QName.valueOf("codeType");
    		QName codeId = QName.valueOf("codeId");
    		QName geoLat = QName.valueOf("geoLat");
    		QName geoLong = QName.valueOf("geoLong");
     
    		StringBuilder sb = new StringBuilder();
    		StringBuilder avxsb = new StringBuilder();
    		int zone=0;
    		XMLInputFactory f = XMLInputFactory.newInstance();
    		try {
    			try(Reader reader = Files.newBufferedReader(Paths.get(fichier))) {
     
    				XMLStreamReader xmlreader = f.createXMLStreamReader( reader);
    				while(xmlreader.hasNext()) {
    				    switch(xmlreader.next()) {
    				    case XMLEvent.START_ELEMENT:
    				    	if ( avx.equals(xmlreader.getName()) ) {
                                                avxsb.append("--------------------------\n"); // rajoute des pointillés pour delimiter chaque zones
    				    		avxsb.append("Zone ").append(zone++).append("\n");
    						    boolean grabtext=false;
    							readavx: while(xmlreader.hasNext()) {
    								switch(xmlreader.next()) {
    							    case XMLEvent.START_ELEMENT:
                                                                     if ( codeType.equals(xmlreader.getName()) ) {
    							    		avxsb.append("\n").append("\n").append(" codeType: ");
    							    		grabtext = true;
                                                                     }
                                                                     else if ( codeId.equals(xmlreader.getName()) ) {
    							    		avxsb.append("\n").append("\n").append(" nom: ");
    							    		grabtext = true;
    							    	}
    							    	else if ( geoLat.equals(xmlreader.getName()) ) {
    							    		avxsb.append("\n").append(" lat:  ");
    							    		grabtext = true;
     
    							    	}
    							    	else if ( geoLong.equals(xmlreader.getName()) ) {
    							    		avxsb.append("\n").append(" long: ");
    							    		grabtext = true;
     
    							    	}
                                                                    else { 
    							    		grabtext = false;
                                                                            avxsb.append("\n");
    							    	}
    							    	break;
    							    case XMLEvent.END_ELEMENT:
    							    	grabtext=false;
    							    	if ( avx.equals(xmlreader.getName())) {
    							    		if ( sb.length()>0 ) sb.append("\n");
    							    		sb.append("\n").append(avxsb);
    							    		avxsb.setLength(0);
    							    		break readavx;
    							    	}
    							    	break;
    							    case XMLEvent.CHARACTERS:
    							    	if ( grabtext ) {
    							    		avxsb.append(xmlreader.getText());
    							    	}
    							    	break;
    							    }
    							}
    				    	}
    				    }
    				}
    			}
     
    			//System.out.println(sb);
     
    			// pour écrire dans un fichier :
     
    			Files.writeString(Paths.get("/Users/moii/Desktop/AIP_test.txt"), sb.toString());
     
     
    		} catch (XMLStreamException | IOException e) {
    			e.printStackTrace();
    		}
     
    	}
     
    }
    voici l'erreur qu'il me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: java.nio.file.Files.writeString
    	at extraction_xml.StaxExemple.main(StaxExemple.java:92)
    quand je passe la souris sur la marque rouge dans la colonne il me dit qu'il ne peut pas trouver le symbol: method writeString(Path,String) // location class Files

    auriez vous une idée s'il vous plait ? Cela veut-il dire que ma class n'est pas a jour ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je pense que c'est un cafouillage de ton IDE. Force la recompilation (clean and rebuild sous Eclipse par exemple). Tu peux essayer aussi un micro changement pour que la recompilation se fasse (tu changes par exemple en Files.writeString(Paths.get("/Users/moii/Desktop/AIP_test.txt"), sb) et pense bien à sauvegardes).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Points : 45
    Points
    45
    Par défaut
    Désolé ca ne marche pas.
    toujours le même souci. j'ai aussi fait un "clean build" mais rien y fait.
    pour info je travaille avec Netbeans. cela pourrait-il être un bug de netbeans? Aussi j'ai un JDK 1.8 (si ca peut aider)

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par K2carca Voir le message
    Aussi j'ai un JDK 1.8
    Dans ce cas c'est étonnant que tu n'aies pas l'erreur "The method writeString(...) is undefined for the type Files" mais c'est peut être de cette façon ("Erroneous sym type") que NetBeans signale qu'il ne trouve pas la méthode, parce qu'en effet, cette méthode a été ajoutée dans la version 11 de Java.
    Passe dans une version récente (Java 13 de préférence, dans trois semaines on passe à Java 14 !), ou utilise un moyen 1.8 d'écrire un fichier texte, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    try(PrintWriter printWriter = new PrintWriter(Files.newBufferedWriter(Paths.get("AIP_test.txt")))) {
    	printWriter.println(sb);
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Points : 45
    Points
    45
    Par défaut
    Bonjour Joeldrigo,

    la solution du try printer fonctionne je te le confirme (au passage merci pour votre aide toujours précieuse et qui m'aide a comprendre le fonctionnement, la logique de programmation).
    autrement je vais essayer d'installer le jdk13/14 pour voir si j'arrive a résoudre ce problème (encore me faut il voir comment je peux faire car dans la librairie du project il y a le JDK 1.8 et dans la librairie de Netbeans j'ai un JDK 12 par default donc je comprends pas trop du coup ....

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Points : 45
    Points
    45
    Par défaut
    Bonjour joel,

    après installation du JDK13 c'est bon, ton code marche.
    Encore une fois merci pour ton aide plus que précieuse et explications

    K

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/02/2012, 18h33
  2. Problème récupération de valeurs récupérées dans BDD
    Par Gordon Freeman dans le forum ASP
    Réponses: 6
    Dernier message: 27/10/2008, 10h00
  3. problème lien (a href ="file:") vers fichier
    Par Pynuch dans le forum Firefox
    Réponses: 8
    Dernier message: 09/04/2008, 15h10
  4. [Automation]Problème avec la valeur envoyé vers un doc word
    Par ludovicparis dans le forum VBA Access
    Réponses: 5
    Dernier message: 12/04/2007, 14h29
  5. problème récupération de données dans des fichiers .DAT
    Par indymontpellier dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/04/2006, 07h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo