2012-06-30 10 views
9

私は改行を有効にするには、このコードを使用します。私は、ルート要素の前に改行をしたいのですが<?xml version = "1.0" encoding = "UTF-8"の後にjava xml domに改行を強制する方法?>?

<?xml version="1.0" encoding="UTF-8"?><root> 
    <child>aaaa</child> 
</root> 

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

しかし、私は出力を以下ます。私は何をすべきか?

+1

これはおそらく難しいです...そして、これは "なぜ?"という質問につながります。私は正規表現を使ってXMLを "解析する"のような、あなたが悪質なことをやっていないことを願っています。 –

+0

XMLはまだ有効です。 xmllintコマンドはあなたのためにファイルをフォーマットすることができます: "xmllint -format?.xml" –

答えて

3

のようなsomehtingは、別の解決策がある。この

transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); 
transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount","2"); 
+0

それは私のためには機能しません。ルート作成の前に 'doc.appendChild(doc.createProcessingInstruction(" xml-stylesheet "、" type = \ "text/xsl \" href = \ "myStylesheet.xsl \" "));を実行すると、 'とこの解決策は動作しません。 – Emadpres

0

あなたはおそらく出て途中で、そのタグの終わりを認識し、改行を追加するためにコード化された(FilterOutputStreamまたはOutputStreamFilterWriterWriterをラップすることにより、改行を自分で追加することができます。

しかし、それは少し愚かです。スティーブンCはコメントに注意しているように、あなたはおそらくこれを気にする必要はありません。

-1

手動で改行を挿入できます。文字列を一時変数に代入します(文字列のtempとします)。そして、この

String filteredStr = new StringBuilder(temp).insert(temp.indexOf('>') + 1, "\n") 
        .toString(); 
1

を試してみてください: transformer.setOutputProperty(OutputKeys.INDENT、 "はい")。 transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC、 "yes"); transformer.setOutputProperty( "{http://xml.apache.org/xslt}インデント量"、 "10");

関連する問題