125 Stimmen

Java: Einrücken von durch Transformer erzeugtem XML

Ich verwende den in Java eingebauten XML-Transformer, um ein DOM-Dokument zu nehmen und das resultierende XML auszudrucken. Das Problem ist, dass der Text überhaupt nicht eingerückt wird, obwohl ich den Parameter "indent" explizit gesetzt habe.

Beispielcode

public class TestXML {

 public static void main(String args[]) throws Exception {
  ByteArrayOutputStream s;

  Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
  Transformer t = TransformerFactory.newInstance().newTransformer();

  Element a,b;

  a = d.createElement("a");
  b = d.createElement("b");

  a.appendChild(b);

  d.appendChild(a);

  t.setParameter(OutputKeys.INDENT, "yes");

  s = new ByteArrayOutputStream();

  t.transform(new DOMSource(d),new StreamResult(s));

  System.out.println(new String(s.toByteArray()));

 }
}

Ergebnis

<?xml version="1.0" encoding="UTF-8" standalone="no"?><a><b/></a>

gewünschtes Ergebnis

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<a>
 <b/>
</a>

Was denken Sie?

6voto

Vikas Chowdhury Punkte 677

Für mich ist das Hinzufügen von DOCTYPE_PUBLIC gearbeitet:

transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,"yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "10");

0 Stimmen

Transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "yes"); ist der Schlüssel

4voto

sevensevens Punkte 1613

Ich habe die Xerces-Bibliothek (Apache) verwendet, anstatt mich mit Transformer herumzuschlagen. Sobald Sie die Bibliothek hinzugefügt haben, fügen Sie den folgenden Code ein.

OutputFormat format = new OutputFormat(document);
format.setLineWidth(65);
format.setIndenting(true);
format.setIndent(2);
Writer outxml = new FileWriter(new File("out.xml"));
XMLSerializer serializer = new XMLSerializer(outxml, format);
serializer.serialize(document);

0 Stimmen

Ja. Ich habe alle anderen Ansätze mit dem Transformer ausprobiert, aber alle sind kaputt. Die ganze W3C-Bibliothek ist ein Chaos. Xerces hat funktioniert.

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