java

xml transformer indent 문제

gt1000 2010. 11. 4. 17:37

[출저] 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"));