Java HTML / XML How to - Overwrite XML document using dom parsers








Question

We would like to know how to overwrite XML document using dom parsers.

Answer

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
/*from  ww w.  jav  a 2s .  c om*/
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
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;

public class Main {
  public static void main(String[] args) throws Exception {
    File xmlFile = new File("test.xml");
    Document document = readXmlDocument(xmlFile);
    makeChanges(document);
    Transformer transformer = createXmlTransformer();
    overwriteXmlFile(xmlFile, document, transformer);
  }
  private static void overwriteXmlFile(File xmlFile, Document document,
      Transformer transformer) throws FileNotFoundException,
      TransformerException {
    StreamResult result = new StreamResult(new PrintWriter(
        new FileOutputStream(xmlFile, false)));
    DOMSource source = new DOMSource(document);
    transformer.transform(source, result);
  }

  private static Transformer createXmlTransformer() throws Exception {
    Transformer transformer = TransformerFactory.newInstance().newTransformer();
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    return transformer;
  }

  private static void makeChanges(Document document) {
    Element root = document.getDocumentElement();
    root.setAttribute("test", "testvalue");
  }

  private static Document readXmlDocument(File xmlFile) throws Exception {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse(xmlFile);
    return document;
  }
}