実際には、javax.xml.stream.XMLStreamWriter(Java SE 6)を使用して書式設定されたXMLを直接書き込む方法はありませんか? JAXBやDOMライブラリなどの他のXML APIがこれを行うことができるので、これは本当に信じられません。 .NET XMLStreamWriterでさえ、このAFAIKに相当します(クラスがSystem.Xml.XmlTextWriterであることを正しく覚えていれば)。XMLStreamWriter:インデント
これは、書式化された出力を生成するためにXMLを再解析することだけです。
例えば:
StringWriter sw = new StringWriter();
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newFactory();
XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(sw);
writeXml(xmlStreamWriter);
xmlStreamWriter.flush();
xmlStreamWriter.close();
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
StringWriter formattedStringWriter = new StringWriter();
transformer.transform(new StreamSource(new StringReader(sw.toString())), new StreamResult(formattedStringWriter));
System.out.println(formattedStringWriter);
この解決策に伴う問題は、プロパティ "{http://xml.apache.org/xslt}indent-amount" です。私はそれに関するドキュメンテーションを見つけられず、ポータブルであることが保証されていないようです。
標準Java 6クラスでこれを行うには、他にどのようなオプションがありますか? JAXBまたはDOMオブジェクトグラフを作成して、かなり印刷しますか?
このようなwriteTextメソッドは見つかりませんでしたか? http://download.oracle.com/javase/6/docs/api/javax/xml/stream/XMLStreamWriterhtml – Puce
うーん、おそらくwriteCharactersを使っていたかもしれませんが、私はこれを要素の内容のためだけに考えました... – Puce
あなたは正しいはずですが、writeCharactersだったはずです。このメソッドは、単一要素内だけでなく、ドキュメント内のどこにでもテキストを挿入するために使用できます。 –