概要: 適切なインデントを付けてファイルに保存したいorg.w3c.dom.Document
(きれいに印刷する)。以下の a を使用したコードは、Transformer
場合によっては機能しますが、すべての場合ではありません (例を参照)。これを修正するのを手伝ってもらえますか?
org.w3c.dom.Document
(not )がorg.jdom.Document
あり、自動的に適切にフォーマットしてファイルに出力したいと考えています。どうやってやるの?これを試しましたが、ドキュメントに追加の改行があると機能しません。
import java.io.ByteArrayInputStream;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
public class Main {
public static void main(String[] args) {
try {
String input = "<asdf>\n\n<a>text</a></asdf>";
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(input.getBytes()));
System.out.println("-- input -------------------\n" + input + "\n----------------------------");
System.out.println("-- output ------------------");
prettify(doc);
System.out.println("----------------------------");
} catch (Exception e) {}
}
public static void prettify(Document doc) {
try {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(new DOMSource(doc), new StreamResult(System.out));
} catch (Exception e) {}
}
}
必要な場所 (たとえばIdeone.com )System.out
で簡単に実行できるように、出力を に送信しました。出力がきれいではないことがわかります。入力文字列からを削除すると\n\n
、すべて問題ありません。また、ドキュメントは通常、文字列ではなくファイルから取得され、きれいにする前に大幅に変更されます。
この Transformer は正しい方法のようですが、何かが欠けています。私が間違っていることを教えてもらえますか?
SSCCE 出力:
-- input -------------------
<asdf>
<a>text</a></asdf>
----------------------------
-- output ------------------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<asdf>
<a>text</a>
</asdf>
----------------------------
期待される出力:
-- input -------------------
<asdf>
<a>text</a></asdf>
----------------------------
-- output ------------------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<asdf>
<a>text</a>
</asdf>
----------------------------