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 :

Vider une fichier xml


Sujet :

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

  1. #1
    Membre du Club Avatar de romaik
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 69
    Points
    69
    Par défaut Vider une fichier xml
    Bonjour a tous.

    J'ai un problème avec un ClassCastException.
    J'ai une classe qui travaille avec 1 fichier xml.
    Son but est de vider le fichiers xml de tous les enfants de la racine.
    Mais ca ne marche evidement pas.

    un resumé de ma classe :
    Code java : 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
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Result;
    import javax.xml.transform.Source;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
     
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
     
    public class ApercuFormulaire {
     
    	private Element racine;
    	private Document d;
     
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
     
    	}
     
    	public void run(){
    		parse("d:\\monXML.xml");
    		empty();
    		transform();
    	}
     
    	private void transform() {
    		Source source = new DOMSource(d);
    		File file = new File("D:\\monXML2.xml");
    		Result resultat = new StreamResult(file);
     
    		// Configuration du transformer
    		TransformerFactory fabrique = TransformerFactory.newInstance();
    		Transformer transformer;
    		try {
    			transformer = fabrique.newTransformer();
    			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    			transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");
     
    			// Transformation
    			transformer.transform(source, resultat);
    		} catch (TransformerConfigurationException e) {
    			e.printStackTrace();
    		} catch (TransformerException e) {
    			e.printStackTrace();
    		}
     
     
    	}
     
    	private void empty() {
     
    		NodeList list = racine.getChildNodes();
    		for(int i =0; i < list.getLength();i++ ) {
    			Node n = (Node) list.item(i);
    		        racine.removeChild(n);	
    		}
     
    		System.out.println(racine.toString());
    	}
     
    	private void parse(String fichier) {
    		try {
    			FileInputStream xml_input_file = new FileInputStream(fichier);
    			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    			factory.setIgnoringComments(true);
    			DocumentBuilder _builder = factory.newDocumentBuilder();
    			d = _builder.parse(xml_input_file);
    			racine = d.getDocumentElement();
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (ParserConfigurationException e) {
    			e.printStackTrace();
    		} catch (SAXException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}	
    	}
     
    }

    Et le fichier 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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <observer>
     
    	<date1 nom="date1" oblig="false" />
    	<date2 nom="date2" oblig="true" />
    	<date3 nom="datebis" oblig="false" />
    	<date4 nom="Date4" oblig="true" />
    	<date5 nom="Date5" oblig="false" />
    	<date6 nom="Date6" oblig="true" />
    	<date7 nom="Date7" oblig="true" />
    	<date8 nom="Date8" oblig="false" />
    	<date9 nom="Date9" oblig="true" />
    	<date10 nom="Dat104" oblig="false" />
    	<date11 nom="Date11" oblig="false" />
    	<date12 nom="Date12" oblig="false" />
     
    	<nombre1 nom="nombre1" oblig="true" />
    	<nombre2 nom="nombre2" oblig="false" />
    	<nombre3 nom="nombre3" oblig="false" />
    	<nombre4 nom="nombre4" oblig="false" />
    	<nombre5 nom="nombre5" oblig="false" />
    	<nombre6 nom="nombre6" oblig="false" />
    	<nombre7 nom="nombre7" oblig="false" />
    	<nombre8 nom="nombre8" oblig="false" />
    	<nombre9 nom="nombre9" oblig="false" />
    	<nombre10 nom="nombre10" oblig="false" />
     
    	<text1 nom="text1" oblig="true" type="champ">
    		<val /><val />
    	</text1>
    	<text2 nom="text2" oblig="false"  type="champ">
    		<val /><val />
    	</text2>
    	<text3 nom="textlist1" oblig="true" type="liste" >
    		<val>valeur 1</val><val>valeur 2</val>
    	</text3>
    	<text4 nom="textlist2" oblig="false" type="liste" >
    		<val>valeur 1</val><val>valeur 2</val>
    	</text4>
    	<text5 nom="text5" oblig="true"  type="champ">
    		<val /><val />
    	</text5>
    	<text6 nom="text6" oblig="false"  type="champ">
    		<val /><val />
    	</text6>
    	<text7 nom="text7" oblig="false"  type="champ">
    		<val /><val />
    	</text7>
    	<text8 nom="text8" oblig="false"  type="champ">
    		<val /><val />
    	</text8>
    	<text9 nom="text9" oblig="false"  type="champ">
    		<val /><val />
    	</text9>
    	<text10 nom="text10" oblig="false"  type="champ">
    		<val /><val />
    	</text10>
     
    </observer>

    Au final, j'ai mon fichier qui reste inchangé :'(

    Si je remplace par j'obtiens ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Unhandled event loop exception
    Reason:
    NOT_FOUND_ERR : Ce noeud n''existe pas dans ce contexte.
    org.apache.crimson.tree.DomEx: NOT_FOUND_ERR : Ce noeud n''existe pas dans ce contexte.
    	at org.apache.crimson.tree.ParentNode.removeChild(ParentNode.java:500)
    	at com.structis.observer.uiparam.notion.typefiche.ui.view.ApercuFormulaire.empty(ApercuFormulaire.java:89)
    Une idée de pourquoi ca ne marche pas ?

    EDIT : oups, oublié de mettre la question

  2. #2
    Membre du Club Avatar de romaik
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 69
    Points
    69
    Par défaut
    Je precise que si je remplace
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    NodeList list = racine.getChildNodes();
    par
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    NodeList list = racine.getElementsByTagName("date1");
    .
    Ca marche.

    Le problème, c'est que j'ai 32 fils et que j'aurai preferer faire ca "proprement"

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Points : 156
    Points
    156
    Par défaut
    Au final, j'ai mon fichier qui reste inchangé :'(
    normal, tu n'écris pas le résultat dans ton fichier.

    Si je remplace
    Code :

    racine.removeChild(n);

    par
    Code :

    d.removeChild(n);
    Pourquoi veux tu remplacer racine par d ?
    si tu veux aussi supprimer l'élément racine alors il suffit de faire d.removeChild(racine) non ?

    Au passage, l'erreur signifie que tu ne peux pas enlever un fils de racine à d parce que ce n'est pas un fils de d (mais un petit fils).

  4. #4
    Membre du Club Avatar de romaik
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 69
    Points
    69
    Par défaut
    oui j'ecris mon resultat dans un autre fichier, histoire de ne pas perdre mon premier fichier par une fausse manip.

    je ne veux pas supprimer l'element racine mais tous ses fils en fait.

    Ok pour le d.removeChild(n);
    si c'est le petit fisl ca marche pas.

    mais quand je fais pas d'erreur, mais les enfants ne sont pas effacés.

    Finallement, j'ai fait la brutes : j'ai fait une recherche de tous les noeuds un par un (en dur, dans le code) puis le les supprime
    c'est moche mais ca marche.

Discussions similaires

  1. Vider un fichier xml dans une Jcombo
    Par Heretic dans le forum Composants
    Réponses: 4
    Dernier message: 22/09/2009, 18h13
  2. acceder a une fichier XML à partir d'un service web
    Par khallou2007 dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 01/12/2008, 21h00
  3. Réponses: 6
    Dernier message: 15/02/2008, 11h10
  4. Réponses: 2
    Dernier message: 22/09/2006, 08h33
  5. Réponses: 5
    Dernier message: 22/07/2005, 23h40

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