[출저] http://blog.anyframejava.org/?p=461
java1.5버전에서는 Transformer를 이용하여 xml 출력시 indent가 제대로 적용이 되지 않는 버그가 있다.
일반적으로 Transformer를 이용하여 document object를 xml문서로 출력하는 방법은 아래와
같다.
Transformer tf =
TransformerFactory.newInstance().newTransformer();
tf.setOutputProperty(OutputKeys.INDENT,
"yes");
tf.setOutputProperty("{http://xml. customer .org/xslt}indent-amount",
"4");
tf.transform(new DOMSource(doc), new
StreamResult(System.out));
하지만 java1.5에서는
버그(http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5064280
)로 인해 indent가
제대로 적용되지 않는다. sun에서는 아래와 같은 방법으로 우회하는 법을 가이드하고 있다.
- TransformerFactory의 indent-number attribute를 설정해 줄 것
- Transformer의 OutputKeys.INDENT property를 yes로 설정해 줄 것
- OutputStream을 Writer로 감쌀 것
수정된 코드는 아래와 같다.
TransformerFactory tf =
TransformerFactory.newInstance();
tf.setAttribute("indent-number", new
Integer(2));
Transformer t =
tf.newTransformer();
t.setOutputProperty(OutputKeys.INDENT,
"yes");
t.transform(new DOMSource(doc), new StreamResult(new
OutputStreamWriter(out, "utf-8"));