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 :

Supprimer les noeuds fils [JDOM]


Sujet :

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

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 44
    Points : 25
    Points
    25
    Par défaut Supprimer les noeuds fils
    Bonjour,

    Je souhaiterais supprimer certains noeuds fils mais pas certains. Je m'explique :

    Je parse mon fichier XML et ensuite je le parcours, je sais le lire, je sais modifier une balise, enregistrer le résultat dans un nouveau fichier XML, supprimer un element fils avec "remove" mais je n'arrive pas à lui dire :

    Si le noeud fil est différent de "x" ou "y" ou "z" alors tu le supprimes.

    j'avais essayer le code suivant :

    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
     
    ...
     
    while(i.hasNext())
    {
    Element courant = (Element)i.next;
     
    if(courant.getChild(element)!=null)
    {
    if(courant.getChild(element)!="x"||"y"||"z")
    {
    courant.removeChild(element);
    }
    }
    }
    Voilà et ça ne focntionne pas !

  2. #2
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ...
    while(i.hasNext()) {
      Element courant = (Element)i.next;
      List fils = courant.getChildren(element);
      Iterator = fils.iterator();
      while (iterator.hasNext()) {
        Element noeud = (Element)iterator.next();
        String balise = noeud.getName();
        if ( "x".equals(balise) || "y".equals(balise) || "z".equals(balise) ) {
          fils.remove(noeud);
        }
      }
    }
    " Jag blev dömd för fildelning och allt jag fick var en sketen t-shirt. " (tankafritt.nu)
    PAS DE REPONSE PAR MESSAGE PRIVE ! Penser au bouton Résolu en bas de la discussion...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    Merci à toi g_rare, mais ça ne fonctionne toujours pas...

    Une autre idée peut-être ? Quelqu'un ?

  4. #4
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Qu'est ce qui ne marche pas ? T'as une erreur ? Une exception ? Ca compile pas ?
    Auquel cas, avant de recopier le code de g_rare, regarde bien, une erreur s'y est glissée, je t'aide, à coté de Charly !
    Remplace
    Iterator = fils.iterator();
    par
    Iterator iterator = fils.iterator();
    "Il y a 3 personnes en ce monde sur qui tu peux compter : moi, le pape et le cavalier solitaire ! "
    Penser à svp

  5. #5
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    Oui merci j'ai bien vu l'erreur du code de g_rare donc ce n'est pas ça le problème.

    En fait, je n'ai pas d'erreur de compilation, par contre mon fichier de sortie est intacte, rien n'a changé...aucun fils n'est supprimé est c'est bien ça le problème !....

  6. #6
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Citation Envoyé par sozie9372
    Auquel cas, avant de recopier le code de g_rare, regarde bien, une erreur s'y est glissée, je t'aide, à coté de Charly !
    Remplace
    Iterator = fils.iterator();
    par
    Iterator iterator = fils.iterator();
    Il faut que j'arrête la programmation sous TEXTAREA...

    Sinon il va nous falloir le code entier de ce que tu fais, pour t'aider !
    " Jag blev dömd för fildelning och allt jag fick var en sketen t-shirt. " (tankafritt.nu)
    PAS DE REPONSE PAR MESSAGE PRIVE ! Penser au bouton Résolu en bas de la discussion...

  7. #7
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    Alors je vous donne mon script :
    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
     
    import java.io.*;
    import org.jdom.*;
    import org.jdom.input.*;
    import org.jdom.output.*;
    import java.util.List;
    import java.util.Iterator;
     
    public class JDom {
    	/**
             * @param args
             */
    	static org.jdom.Document document;
    	static Element racine;
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		try
    		{
     
    			lireFichier("SitDiv1630.xml");
    			supprElement("m_pos");
    			modifElement("c_Force");
    			enregistreFichier("SitDivModifJava.xml");
    		}
    catch(Exception e){}
    	}
    static void lireFichier(String fichier) throws Exception
    {
    	SAXBuilder sxb = new SAXBuilder();
    	document = sxb.build(new File(fichier));
    	racine = document.getRootElement();
    }
    static void supprElement(String element)
    {
    	Element entite = racine.getChild("Entities");
    	//On crée une List contenant tous les noeuds "c_Force" de l'Element racine
    	List force = entite.getChildren("c_Force");
     
    	//On crée un Iterator sur notre liste
    	Iterator i = force.iterator();
    	while(i.hasNext())
    	{
    //	On recrée l'Element courant à chaque tour de boucle afin de
    //	pouvoir utiliser les méthodes propres aux Element comme :
    //	selectionner un noeud fils, modifier du texte, etc...
    	Element courant = (Element)i.next();
    	//if(courant.getChild(element)!=null)
    	//{
     
    		//if(!courant.getChild(element).getName().equals("m_Lat")){
    		//courant.removeChild(element);
     
    	//}
    	//}
     
    	/*_________________________________________________________________*/
     
    	List fils = courant.getChildren(element);
    	Iterator iterator= fils.iterator();
    	while (iterator.hasNext()){
    		Element noeud = (Element)iterator.next();
    		String balise = noeud.getName();
    		//if ("m_Nom".equals(balise)||"m_Element".equals(balise)|| "m_Lat".equals(balise)||"m_Lon".equals(balise)){
    			fils.remove(noeud);
    		//}
    	}
    }
    }
     
    static void modifElement(String element)
    {
    	Element entite = racine.getChild("Entities");
    	//On crée une List contenant tous les noeuds "c_Force" de l'Element racine
    	List force = entite.getChildren("c_Force");
     
    	//On crée un Iterator sur notre liste
    	Iterator i = force.iterator();
    	while(i.hasNext())
    	{
    //	On recrée l'Element courant à chaque tour de boucle afin de
    //	pouvoir utiliser les méthodes propres aux Element comme :
    //	selectionner un noeud fils, modifier du texte, etc...
    	Element courant = (Element)i.next();
    	if(courant.getName()== element)
    	{	
    		courant.setName("c_TS_SYML_OAPoint");
     
     
    	}
    }
    }
     
    static void enregistreFichier(String fichier) throws Exception
    {
    	XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
    	sortie.output(document, new FileOutputStream(fichier));
    }
    }
    Et voilà un exemple de structure de fichier XML de départ nommé SitDiv1630.xml :

    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
     
    - <c_Force id="e1" ts="2006-06-08T10:54:50">
      <m_Domaine>MANVR</m_Domaine> 
      <m_Nom>35°RI/7°BB</m_Nom> 
      <m_Nationalite>FR</m_Nationalite> 
      <m_HQ>false</m_HQ> 
      <m_Groupement>false</m_Groupement> 
      <m_Fictif>false</m_Fictif> 
      <m_Force_exc1>Land force</m_Force_exc1> 
    - <m_etat_operationnel>
    - <c_Etat_op_EntiteOrg>
      <m_Comportement>FR</m_Comportement> 
      <m_Etat_operationnel>OPR</m_Etat_operationnel> 
      <m_Engage>false</m_Engage> 
    - <m_rapport>
    - <c_Rapport>
      <m_Confirmation>REP</m_Confirmation> 
      <m_Comptage>false</m_Comptage> 
    - <m_GDH_rapport>
      <m_dateTime>2005-09-27T09:45:12</m_dateTime> 
      <m_Z>Z</m_Z> 
      </m_GDH_rapport>
      <m_Rapport_exc1>Reporting force</m_Rapport_exc1> 
      </c_Rapport>
      </m_rapport>
      </c_Etat_op_EntiteOrg>
      </m_etat_operationnel>
    - <m_descr_force_terre>
    - <c_Force_Terre>
      <m_Categorie>COMBAT</m_Categorie> 
      <m_Arme>INF</m_Arme> 
      <m_Specialis_arme_2>MECH</m_Specialis_arme_2> 
      <m_Niveau>BN</m_Niveau> 
      </c_Force_Terre>
      </m_descr_force_terre>
    - <m_pos>
    - <c_Localisation_2d>
      <m_Forme>POINT</m_Forme> 
    - <m_coord>
    - <m_Element>
      <m_Lat>49.324945</m_Lat> 
      <m_Lon>3.989128</m_Lon> 
      </m_Element>
      </m_coord>
      <m_Confirmation>REP</m_Confirmation> 
    - <m_rapport>
    - <c_Rapport>
      <m_Confirmation>REP</m_Confirmation> 
      <m_Comptage>false</m_Comptage> 
    - <m_GDH_rapport>
      <m_dateTime>2005-11-24T15:08:40</m_dateTime> 
      <m_Z>Z</m_Z> 
      </m_GDH_rapport>
      <m_Rapport_exc1>Reporting force</m_Rapport_exc1> 
      </c_Rapport>
      </m_rapport>
      </c_Localisation_2d>
      </m_pos>
      </c_Force>

    Et la strucutre que je veux obtenir dans un nouveau fichier XML nommé SitDivModifJava.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <c_TS_SYML_OAPoint id="e100" ts="2006-06-08T10:54:50">
    <m_Nom>35°RI/7°BB</m_Nom> //Balise à récupérer
    <m_Couleur>RED</m_Couleur> //Balise et contenu fixes à rajouter
    <m_Points>//Balise fixe à rajouter
      <m_Element> //Balise à récupérer
        <m_Lat>49.324945</m_Lat> //Balise à récupérer
        <m_Lon>3.989128</m_Lon> //Balise à récupérer
       </m_Element>//Balise à récupérer
    </m_Points> //Balise fixe à rajouter
    <m_TypeMarqueur> Full circle <m_TypeMarqueur> //Balise et contenu fixes à rajouter
    </c_TS_SYML_OAPoint>
    Merci de votre aide

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

Discussions similaires

  1. Impossible de supprimer les noeuds d'un wxTreeCtrl !
    Par zuzuu dans le forum wxWidgets
    Réponses: 2
    Dernier message: 09/07/2010, 08h41
  2. [XSLT] Supprimer les noeuds vides
    Par knebhi dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/02/2009, 16h07
  3. Réponses: 3
    Dernier message: 17/08/2007, 11h20
  4. Supprimer les noeuds precis.
    Par rainlily dans le forum ASP.NET
    Réponses: 1
    Dernier message: 25/07/2007, 08h52
  5. Réponses: 2
    Dernier message: 26/04/2006, 09h34

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