2015-12-20 2 views
0

J'utilise des éléments xml org.w3c.dom.Le noeud XML n'est pas supprimé du fichier XML.

j'arrive à un point où cette ligne est appelée (vu qu'il y arrive quand débogué le code):

node.getParentNode().removeChild(node); 

Cependant, le nœud reste au fichier et ce n'est pas être mis à jour du tout.

Juste pour le test, j'ai essayé de faire aussi:

Element root = doc.getDocumentElement(); 
root.removeChild(node); 
node.getParentNode().removeChild(node); 

Et puis je me suis une exception sur la 3ème ligne d'une exception de pointeur nul, mais le nœud reste toujours dans le fichier lui-même, et je peux appeler l'action de suppression à nouveau et le noeud est trouvé dans le fichier.

Y a-t-il autre chose à faire pour supprimer le noeud?

+4

S'il vous plaît poster des échantillons, mais un minimum complet nous permettant de reproduire le problème. Je ne pense pas que 'removeChile' est le nom d'une méthode du tout. Et lorsque vous supprimez un noeud de l'arborescence DOM avec 'removeChild', le fichier n'est pas modifié, uniquement l'arborescence DOM dans la mémoire, vous devez donc sauvegarder l'arbre DOM modifié dans un fichier. –

+0

Si vous recherchez une bibliothèque où l'objet 'Document' est encore en ligne dans le fichier à partir duquel il a été chargé, jetez un oeil à JDOM2. Il peut aussi faire ce que fait org.w3c.dom. – RAnders00

+0

bien Martin si vous le savez alors pourquoi ne pas écrire la réponse et obtenir une réponse acceptée –

Répondre

0

Votre code est très limité. Ainsi, plusieurs possibilités:

1 votre essayez de supprimer un nœud vous supprimez avant

=> puis root.removeChild (noeud); vous donne null au noeud

=> alors node.getParentNode() lève une exception: pourquoi faites-vous cela?

2 méfiez-vous de votre recherche (même problème que ci-dessus). Supprimer l'enfant est récursif. Vous devriez penser aux chemins que vous supprimez.

3 vous juste ne pas enregistrer votre xml:

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
Result out = new StreamResult(new File("result.xml")); 
Source in = new DOMSource(document); 
transformer.transform(in, out); 
+0

Dommage que les autres gars juste commenté sur une erreur que j'avais avec "e" et "d" au lieu d'obtenir la réponse acceptée comme vous fait –