Después de eliminar nodos xml en java, el archivo xml no se actualiza

Estoy usando el siguiente código para eliminar algunos nodos específicos del archivo xml ... Muestra la salida correcta en la consola, pero de alguna manera el archivo xml no se actualiza ... el contenido permanece tal como está ... por favor ayuda ... Gracias ...

package com.sumit.xml.client;

import java.io.*;

import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.parsers.*;
import javax.xml.transform.*; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult;

public class ReadCDATA {
  static public void main(String[] arg) {
  try{
  BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
  System.out.print("Enter a XML file name: ");
  String xmlFile = bf.readLine();
  File file = new File(xmlFile);
  System.out.print("Enter an element which have to delete: ");
  String remElement = bf.readLine();
  if (file.exists()){
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = factory.newDocumentBuilder();
  Document doc = builder.parse(xmlFile);
  TransformerFactory tFactory = TransformerFactory.newInstance();
  Transformer tFormer = tFactory.newTransformer();
  Element element = (Element)doc.getElementsByTagName(remElement).item(0);
//  Remove the node
  element.getParentNode().removeChild(element);
//  Normalize the DOM tree to combine all adjacent nodes
  doc.normalize();
  Source source = new DOMSource(doc);
  Result dest = new StreamResult(System.out);
  tFormer.transform(source, dest);
  System.out.println();

  }
  else{
  System.out.println("File not found!");
  }
  }
  catch (Exception e){
  System.err.println(e);
  System.exit(0);
  }
  }
} 
Respuesta 1

DOM se cambia solo en la memoria de proceso. No hay nada en el código que haya mostrado que pueda escribir datos en el archivo XML subyacente de forma transparente.

Necesitas agregar algo como

createOutputFile("output.xml", transformToString(document));

private static String transformToString(Document document) {
    try {
        TransformerFactory transFactory = TransformerFactory.newInstance();
        Transformer transformer = transFactory.newTransformer();
        StringWriter buffer = new StringWriter();
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.transform(new DOMSource(document), new StreamResult(buffer));
        return buffer.toString();
    } catch (TransformerException e) {
        throw new RuntimeException(e);
    }
}


private static void createOutputFile(String filePath, String content) {
    FileWriter writer = null;
    try {
        try {
            writer = new FileWriter(filePath);
            writer.write(content);
        } finally {
            if (writer != null) {
                writer.flush();
                writer.close(); 
            }
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
Respuesta: 2

Debe llamar a TFormer.transform también en OutputStream del archivo

Respuesta: 3

después de eliminar un nodo de xml, escriba el contenido en el archivo xml

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = dbf.newDocumentBuilder();
  InputSource is = new InputSource();
  is.setCharacterStream(new StringReader(xml));

  Document doc = db.parse(is);


// write the content into xml file

    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(doc);
    StreamResult result = new StreamResult(new File(filepath));
    transformer.transform(source, result);

después de escribir el contenido en el archivo xml, el archivo xml se actualiza.

Respuesta: 4

¿Cómo configuro una matriz para cambiar la URL de una tarea de descarga asíncrona para varios botones? Esto no funciona y no estoy seguro de cómo solucionarlo. Cadena final [] dlUrl = nueva Cadena [] {"www.google.com/document ...

Tengo una imagen en la carpeta. Manualmente agregué etiquetas a la imagen. Quiero cargar la imagen y mostrar sus etiquetas. Para obtener metadatos de imagen, utilicé el tutorial http: //johnbokma.com/java/obtaining -...

Tengo un archivo de texto que contiene dominios como ABC.COM ABC.COM DEF.COM DEF.COM XYZ.COM Quiero leer los dominios del archivo de texto y verificar cuántas instancias de dominios hay. Leyendo de un ...

Necesito conectarme al servidor remoto a través de FTPS (implícito o explícito). Me conecté con éxito al servidor a través de FileZilla. También probé el código para recuperar el archivo de ftp público: ftp.mozilla.org Ahora necesito ...