Jdom

Résolu
Signaler
Messages postés
120
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
24 septembre 2012
-
Messages postés
120
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
24 septembre 2012
-
Bonjour
Es que vous pouvez m’aider
Je travail avec jdom et je veux supprimer prenom lorsque il prenom= john

merci





john


Fr






sos


France












public static void main(String[] args)
{
try
{
lireFichier("p.xml");
supprElement("prenom");
enregistreFichier("p.xml");
}
catch(Exception e){System.out.print(e.toString());}
}

//On parse le fichier et on initialise la racine de
//notre arborescence
static void lireFichier(String fichier) throws Exception
{
SAXBuilder sxb = new SAXBuilder();
document = sxb.build(new File(fichier));
racine = document.getRootElement();
}

//L'on fait des modifications sur un Element
static void supprElement(String element)
{
//Dans un premier temps on list tous les étudiants
List listEtudiant = racine.getChildren("Personne");
Iterator i = listEtudiant.iterator();
//On parcours la liste grâce à un iterator
while(i.hasNext())
{
Element courant = (Element)i.next();
//Si l'etudiant possède l'Element en question on applique
//les modifications.

if(courant.getChild(element).getAttribute("john")!=null)

// if(courant.getAttribute(element)!=null)
{
//On supprime l'Element en question
// if(courant.getChild(element)!=null)

courant.removeChild(element);


}
}
}

//On enregsitre notre nouvelle arborescence dans le fichier
//d'origine dans un format classique.
static void enregistreFichier(String fichier) throws Exception
{
XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
sortie.output(document, new FileOutputStream(fichier));
}




}

9 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Salut,

C'est que john n'est pas un attribute de ton noeaud, c'est le texte contenu dans le noeud :

//L'on fait des modifications sur un Element 
void supprElement(String element) // pourquoi tu fais toutes tes fonction en static ??? Surtout pas : tu as besoin de variable membre dans ta classe, donc oublie le static
{ 
//Dans un premier temps on list tous les étudiants 
List listEtudiant = racine.getChildren("Personne"); 
Iterator i = listEtudiant.iterator(); 
//On parcours la liste grâce à un iterator 
while(i.hasNext()) 
{ 
Element courant = (Element)i.next(); 
//Si l'etudiant possède l'Element en question on applique 
//les modifications. 

if("john".equalsIgnoreCase(courant.getChild(element).getText())) 
{ 
courant.removeChild(element); 
} 
} 
} 

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Salut,

Il ne faut pas l'appeler sur le courant, mais sur son parent : si tu l'appelle sur l'élément courant, il ne fait que supprimer son contenu (logique), donc :
if (a.equals("goupil"))
{
listEtudiant.remove(courant) ;
}
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Salut,

Il faut que ta liste soit synchronized.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Salut,

Essaye ainsi :
synchronized List listEtudiant = Collections.synchronizedList(racine.getChildren("personne"));
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
120
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
24 septembre 2012

Bonjour


merci de votre reponse
mais il reste le probleme java.lang.NullPointerException

mais existe balise john



merci
Messages postés
120
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
24 septembre 2012

Bonjour
esque vous pouvez m'aider
Je travail avec Jdom je veux supprimer une balise personne lorsque nom= "goupil"
J’ai utiliser removeContent() mais il laisse
Je veux supprimer toutes la balise

goupil
matthiefu







Le ficher XML




goupil
matthiefu






goupil1
matthiefu








List listEtudiant = racine.getChildren("personne");
Iterator i = listEtudiant.iterator();
// On parcours la liste grâce à un iterator
while(i.hasNext())
{
Element courant = (Element)i.next();
// Si l'etudiant possède l'Element en question on applique
// les modifications.
String a=courant.getChildText("nom");

if (a.equals("goupil"))
{

courant.removeContent() ;

}

reultat





goupil1
matthiefu









mais je veux comme ca





goupil1
matthiefu









merci
Messages postés
120
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
24 septembre 2012

merci de votre aide
mais ca marche pas il donne

java.util.ConcurrentModificationException
Messages postés
120
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
24 septembre 2012

bonjour
je suis très désoler de dérangement
mais j'ai pas bien compris

esque comme ca

List listEtudiant = Collections.synchronizedList(racine.getChildren("personne"));



meme comme ca ca marche pas


merci
Messages postés
120
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
24 septembre 2012

meme chose erreure