XMLにインデントをつける 戻る
開発環境等
  • JDK 1.8.0_20
インデントを整えるとは?

インデントを自力で整えることは可能でありますが、面倒な処理になると思います。

インデントされる前の状態(現在) <book><person>hoge</person><isbn>1234</isbn></book>
インデントされた状態(最終目標) <book> <person>hoge</person> <isbn>1234</isbn> </book>
Javaにてインデントを整える

Transformerクラスを用いてフォーマットします。

下記の「OutputKeys.METHOD」に「xml」を指定していることから「html」などの整形もできるようです。

インデント例 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import com.sun.org.apache.xml.internal.serializer.OutputPropertiesFactory; public class Indenter { public static String indent(String xml, int indent) throws Exception { Transformer f = TransformerFactory.newInstance().newTransformer(); f.setOutputProperty(OutputKeys.INDENT, "yes"); f.setOutputProperty(OutputKeys.METHOD, "xml"); f.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); f.setOutputProperty(OutputPropertiesFactory.S_KEY_INDENT_AMOUNT, String.valueOf(indent)); byte[] bytes = xml.getBytes(); InputStream is = new ByteArrayInputStream(bytes); StreamSource src = new StreamSource(is); OutputStream os = new ByteArrayOutputStream(); StreamResult result = new StreamResult(os); f.transform(src, result); return os.toString(); } public static void main(String[] args) throws Exception { String xml = "<book><person>hoge</person><isbn>1234</isbn></book>"; System.out.println(indent(xml, 4)); } }

*1 上記は適切な例外処理やclose処理などを行っておりません。必要に応じ変更して下さい。