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

Android Discussion :

Filtre avec JDOM


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 38
    Par défaut Filtre avec JDOM
    Bonjour,

    Je suis un peu débutant en java et essaye de développer une appli qui collecte des données GPS et les transformes en fichier KML.

    Donc, suivant le bouton enfoncé je dois rajouter des Éléments <placemark> ensuite les coordonnées du GPS doivent être écrite entre les balise <coordinate> "enfant de placemark".

    Le programme gère correctement l'ajout du <placemark> mais lorsque j'insere des coordonnées rien ne vas plus toute celles-ci sont écrite dans le premier Element <placemark> trouvé et du coup plus aucune trace des autres <placemark> ajoutés.

    Je sais pas si j'ai bien résumé la situation ?

    Merci d'avance pour votre aide !

    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
    Le KML
     
    <?xml version="1.0" encoding="UTF-8"?>
    <Document>
      <Placemark>
        <name>Write</name>
        <Description />
        <Style>
          <LineStyle>
            <color>FFFFFF</color>
            <width />
            <tesselate />
            <altitudeMode />
          </LineStyle>
        </Style>
        <LineString>
          <coordinates />
        </LineString>
      </Placemark>
      <Placemark>
        <name>HLP</name>
        <Description />
        <Style>
          <LineStyle>
            <color>HLP</color>
            <width />
            <tesselate />
            <altitudeMode />
          </LineStyle>
        </Style>
        <LineString>
          <coordinates>Lati HP Longi HLP Lati droite  Longi droite</coordinates>
        </LineString>
      </Placemark>
    </Document>
    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
    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
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
     
    La Class
     
    package com.plectre.test;
     
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Iterator;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.filter.ElementFilter;
    import org.jdom2.input.SAXBuilder;
    import org.jdom2.output.Format;
    import org.jdom2.output.XMLOutputter;
     
    public class Xml {
    	static Document document;
    	static Element racine;
    	static Element placemark;
     
    	public void writeXml() {
     
    		// String typeDoc = "<kml xmlns=\"http://www.opengis.net/kml/2.2\">";
     
    		// Creation de la racine KML qui sera <Document>
    		racine = new Element("Document");
    		// Création du nouveau document KML avec <Document> en racine du fichier
    		document = new Document(racine);
     
    		// On crée le placemark
    		Element placemark = new Element("Placemark");
    		racine.addContent(placemark);
     
    		// On crée l'element name
    		Element name = new Element("name");
    		placemark.addContent(name);
    		name.setText("Write");
     
    		Element desc = new Element("Description");
    		placemark.addContent(desc);
     
    		Element style = new Element("Style");
    		placemark.addContent(style);
     
    		Element lineStyle = new Element("LineStyle");
    		style.addContent(lineStyle);
     
    		Element color = new Element("color");
    		lineStyle.addContent(color);
    		color.addContent("FFFFFF");
     
    		Element width = new Element("width");
    		lineStyle.addContent(width);
     
    		// Element multigeo = new Element("MultiGeometry");
    		// placemark.addContent(multigeo);
     
    		// On crée element lineString
    		Element LineString = new Element("LineString");
    		// On ajoute Line String à placemark
    		placemark.addContent(LineString);
     
    		Element tesselate = new Element("tesselate");
    		lineStyle.addContent(tesselate);
     
    		Element altiMode = new Element("altitudeMode");
    		lineStyle.addContent(altiMode);
    		// On crée l'element ccordinate
    		Element coord = new Element("coordinates");
    		// On ajoute coordinate en enfant de LineString
    		LineString.addContent(coord);
     
    		// On met les coordonnées entre les balises coordinates
    		// coord.addContent(" 00000" + " , " + " 0.1234 ");
     
    		try {
    			XMLOutputter xmlOutPut = new XMLOutputter(Format.getPrettyFormat());
    			xmlOutPut.output(document, new FileOutputStream(new File(
    					"./src/Trak.kml")));
     
    		}
     
    		catch (Exception ex) {
    			ex.printStackTrace();
    		}
    	}
     
    	// Construction de la méthode XmlBuilder
    	public void readXml() {
     
    		SAXBuilder sxb = new SAXBuilder();
    		try {
    			document = sxb.build(new File("./src/Trak.kml"));
     
    		} catch (Exception e) {
    			System.out.println("Erreur ouverture Trak.kml");
    		}
     
    	}
     
    	// ****************************************************************
    	// ******** Ajout coordonnées dans le dernier <coordinates> *********
    	// ****************************************************************
    	public void newCoordonnees(String lat, String longi) throws JDOMException,
    			IOException {
     
    		// Récuperation du dernier placemark
    		SAXBuilder sxb = new SAXBuilder();
    		document = sxb.build(new File("./src/Trak.kml"));
     
    		// .............................................................
    		// Premier Filtre le KML afin de récupérer le dernier Placemark
    		// .............................................................
    		ElementFilter docFilter = new ElementFilter("Placemark");
    		Iterator<?> itrDoc = (Iterator<?>) document.getDescendants(docFilter);
    		Element plac = null;
    		while (itrDoc.hasNext()) {
    			plac = (Element) itrDoc.next();
    			System.out.println("plac " + plac + "\r\n");
    		}
     
    		if (plac != null) {
     
    			// }
    			// .............................................................
    			// Deuxieme Filtre récupére le <coordinates> ...............
    			// .............................................................
    			ElementFilter efilter = new ElementFilter("coordinates");
    			Iterator<?> itr = (Iterator<?>) plac.getDescendants(efilter);
    			Element coord = null;
    			while (itr.hasNext()) {
    				coord = (Element) itr.next();
     
    			}
    			// On ajoute les coordonées
    			if (coord != null) {
    				System.out.println("coord != null : " + coord + "\r\n");
    				coord.addContent(lat);
    				coord.addContent(longi);
    				try {
    					XMLOutputter xmlOutPut = new XMLOutputter(
    							Format.getPrettyFormat());
    					xmlOutPut.output(document, new FileOutputStream(new File(
    							"./src/Trak.kml")));
    				}
     
    				catch (Exception e) {
    					System.out.println(e.getMessage());
     
    				}
     
    			}
    		}
    	}
     
    	public void filtrePlacemark() throws JDOMException, IOException {
     
    		SAXBuilder sxb = new SAXBuilder();
    		document = sxb.build(new File("./src/Trak.kml"));
     
    		// .............................................................
    		// Premier Filtre le KML pour récupérer le dernier Placemark
    		// .............................................................
    		ElementFilter docFilter = new ElementFilter("Placemark");
    		Iterator<?> itrDoc = (Iterator<?>) document.getDescendants(docFilter);
    		Element plac = null;
    		while (itrDoc.hasNext()) {
    			plac = (Element) itrDoc.next();
    			System.out.println(plac);
    			newTypeCollecte("Type de collecte " + itrDoc.toString());
     
    		}
    		// .............................................................
    		// Deuxieme Filtre récupére le texte de coordinates
    		// .............................................................
    		ElementFilter efilter = new ElementFilter("coordinates");
    		Iterator<?> itr = (Iterator<?>) plac.getDescendants(efilter);
    		Element coord = null;
    		while (itr.hasNext()) {
    			coord = (Element) itr.next();
     
    		}
     
    		if (coord != null) {
    			System.out.println("coord != null : " + coord + "\r\n");
    			coord.addContent("rien ");
    			coord.addContent("Rien");
    			try {
    				XMLOutputter xmlOutPut = new XMLOutputter(
    						Format.getPrettyFormat());
    				xmlOutPut.output(document, new FileOutputStream(new File(
    						"./src/Trak.kml")));
    			}
     
    			catch (Exception e) {
    				System.out.println(e.getMessage());
     
    			}
     
    		}
    	}
     
    	// **************************************************************
    	// ********** Changement du type decollecte ***********************
    	// **************************************************************
    	public void newTypeCollecte(String typeCollecte) {
     
    		try {
     
    			// On crée le placemark
    			Element placemark = new Element("Placemark");
    			racine.addContent(placemark);
     
    			// On crée l'element name
    			Element name = new Element("name");
    			placemark.addContent(name);
    			name.setText(typeCollecte);
     
    			Element desc = new Element("Description");
    			placemark.addContent(desc);
     
    			Element style = new Element("Style");
    			placemark.addContent(style);
     
    			Element lineStyle = new Element("LineStyle");
    			style.addContent(lineStyle);
     
    			Element color = new Element("color");
    			lineStyle.addContent(color);
    			color.addContent(typeCollecte);
     
    			Element width = new Element("width");
    			lineStyle.addContent(width);
     
    			// Element multigeo = new Element("MultiGeometry");
    			// placemark.addContent(multigeo);
     
    			// On crée element lineString
    			Element LineString = new Element("LineString");
    			// On ajoute Line String à placemark
    			placemark.addContent(LineString);
     
    			Element tesselate = new Element("tesselate");
    			lineStyle.addContent(tesselate);
     
    			Element altiMode = new Element("altitudeMode");
    			lineStyle.addContent(altiMode);
     
    			// On crée l'element ccordinate
    			Element coord = new Element("coordinates");
    			// On ajoute coordinate en enfant de LineString
    			LineString.addContent(coord);
     
    			XMLOutputter xmlOutPut = new XMLOutputter(Format.getPrettyFormat());
    			xmlOutPut.output(document, new FileOutputStream(new File(
    					"./src/Trak.kml")));
     
    			System.out.println("Methode nouveau placemark");
    		}
     
    		catch (Exception ex) {
    			ex.printStackTrace();
    		}
    	}
    }
    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
    Le Main
     
    package com.plectre.test;
     
    import java.io.IOException;
     
    import org.jdom2.JDOMException;
     
    public class Driver {
     
    	public static void main(String[] args) throws JDOMException, IOException {
    		Xml xml = new Xml();
     
    		xml.writeXml();
     
    		xml.newTypeCollecte("HLP");
    		xml.newCoordonnees(" Lati HP ", "Longi HLP ");
    		xml.newTypeCollecte("Droite");
    		xml.newCoordonnees(" Lati droite ", " Longi droite ");
    		xml.newTypeCollecte("Gauche");
    		xml.readXml();
    	}
    }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    Je ne vois pas ce qui te fait penser que l'ajout de nouveau placemark est bien géré.

    (Par ailleurs, un KML ne commence pas par <Document>. Il ne faut pas oublier le <kml>, et cela change pas mal de choses.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 38
    Par défaut
    Bonjour thelvin ,

    Merci pour ta réponse ultra rapide ...

    En effet le KML n'est pas complet mais il fonctionne comme ça alors comme je sais pas trop j'ai préféré ne rien changer pour le moment. C'est sur que c'est pas beau ...

    Quand à l'ajout du placemark tous ce passe bien à chaque appeln de la fonction et l'ajout de coordinates fait merder ....

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ah, je vois. Vu comme ça, ça peut donner cette impression.

    Ça ne marche pas parce que newTypeCollecte() travaille à la fois sur les variables statiques racine et document sans les avoir définies elle-même.
    Ça ne peut pas aller puisque les autres méthodes de la classe, changent document mais pas racine.

    ...

    Il serait plus logique, d'une part que ces variables ne soient pas statiques, et d'autre part qu'elles soient final et initialisées une seule fois, dans le constructeur. Toutes ces lectures/écritures du fichier XML sont inutiles. Il n'y a pas besoin de le lire, et l'écriture peut n'être faite qu'à la fin, quand on a terminé.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 38
    Par défaut
    Bon je doit reconnaître que j'ai pas tout compris "bien que tu sois très clair" mais ça me donne une piste !
    En tout les cas merci pour ta patiente.

Discussions similaires

  1. [JDOM] Problème pour lire les noeuds avec JDOM
    Par Eclix dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 26/05/2014, 18h11
  2. [JSP] Parsing XML avec JDOM
    Par benben13 dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 26/08/2005, 17h19
  3. [Plugin / XML] Problème plugin Eclipse avec JDOM
    Par kiko_18 dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 12/02/2005, 13h55
  4. [JDOM] Parser avec JDOM
    Par GLDavid dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 11/08/2004, 22h40
  5. [JAR]Probleme compilation avec jdom
    Par ronaldgis dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 04/08/2004, 11h31

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