48 Stimmen

Wie speichert man ein geparstes und geändertes DOM-Dokument in einer Xml-Datei?

Ich habe eine Xml-Datei. Ich muss sie lesen, einige Änderungen vornehmen und die neue geänderte Version an ein neues Ziel schreiben.

Es ist mir gelungen, diese Datei zu lesen, zu parsen und zu patchen (mit DocumentBuilderFactory , DocumentBuilder , Document und so weiter).

Aber ich kann nicht herausfinden, wie ich diese Datei speichern kann. Gibt es eine Möglichkeit, die reine Textansicht zu erhalten (als String ) oder einen besseren Weg?

76voto

skaffman Punkte 389758

Das funktioniert etwa so:

Transformer transformer = TransformerFactory.newInstance().newTransformer();
Result output = new StreamResult(new File("output.xml"));
Source input = new DOMSource(myDocument);

transformer.transform(input, output);

2voto

Lukas Eder Punkte 194234

Das wird funktionieren, vorausgesetzt, Sie verwenden xerces-j :

public void serialise(org.w3c.dom.Document document) {
  java.io.ByteArrayOutputStream data = new java.io.ByteArrayOutputStream();
  java.io.PrintStream ps = new java.io.PrintStream(data);

  org.apache.xml.serialize.OutputFormat of =
                      new org.apache.xml.serialize.OutputFormat("XML", "ISO-8859-1", true);
  of.setIndent(1);
  of.setIndenting(true);
  org.apache.xml.serialize.XMLSerializer serializer =
                      new org.apache.xml.serialize.XMLSerializer(ps, of);
  // As a DOM Serializer
  serializer.asDOMSerializer();
  serializer.serialize(document);

  return data.toString();
}

0voto

Frank M. Punkte 977

Das gibt Ihnen die Möglichkeit, das XML-Format zu definieren

new XMLWriter(new FileOutputStream(fileName),
              new OutputFormat(){{
                        setEncoding("UTF-8");
                        setIndent("    ");
                        setTrimText(false);
                        setNewlines(true);
                        setPadText(true);
              }}).write(document);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X