Transformer によって生成された XML をインデントしようとしています。最初のノード - ドキュメント要素を除いて、すべての DOM ノードが期待どおりにインデントされています。document 要素は新しい行で開始されず、XML 宣言の直後に連結されます。
このバグは、Java 1.7 に移行したときに発生します。Java 1.6 または 1.5 を使用している場合は発生しません。
私のコード:
ByteArrayOutputStream s = new OutputStreamWriter(out, "utf-8");
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","4");
transformer.transform(new DOMSource(doc), new StreamResult(s));
出力:
<?xml version="1.0" encoding="UTF-8"?><a>
<b>bbbbb</b>
</a>
誰でも理由を知っていますか?
ところで、プロパティを追加すると
transformer.setOutputProperty(OutputKeys.STANDALONE, "yes");
期待どおりに動作しますが、xml 宣言が変更され、スタンドアロン プロパティも含まれるようになりました。xml 宣言を変更したくありません。