Javaを使用してxmlをフォーマットする方法

Java開発キットには、XMLコンテンツを操作するjavax.xml.transformパッケージが含まれています。 トランスフォーマオブジェクトは、XMLを含むストリームを入力します。 トランスフォーマは、トランスフォームメソッドを使用してトランスフォームを適用します。

例:

この例では、インデントされていないxmlを保持する入力Stringを作成します。 次に、TransformerFactoryを使用してTransformerを作成します。 トランスフォーマーはxmlをインデントするように構成されています。 インデントのサイズは2です。変換メソッドが呼び出され、プロセスの出力はSystem.outに書き込まれます。 xmlが無効であるようなエラーが発生した場合は、エラーメッセージも出力に表示されます。

import java.io.StringReader;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class XmlFormatter {

    public static void main(String[] argv) {

	final String input = "<a><b>test</b><c>test2</c></a>";
	
	java.io.StringWriter xmlResultResource = new java.io.StringWriter();
	Transformer xmlTransformer = null;
	try {
	    xmlTransformer = TransformerFactory.newInstance().newTransformer();

	    xmlTransformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
	    xmlTransformer.setOutputProperty(OutputKeys.INDENT, "yes");
	} catch (TransformerConfigurationException e) {
	    System.out.println( "Transformer configuration error: " + e.getMessage() );
	    return;
	}

	try {
	    xmlTransformer.transform(new StreamSource(new StringReader(input)),
		    new StreamResult(xmlResultResource));
	} catch (TransformerException e) {
	    System.out.println("Error transform: " + e.getMessage());
	    return;
	}

	final String output = xmlResultResource.getBuffer().toString();

	System.out.println( "input:" );
	System.out.println( input  );

	System.out.println( "output:" );
	System.out.println( output  );
    }

}

出力は次のようになります。

input:
<a><b>test</b><c>test2</c></a>
output:
<?xml version="1.0" encoding="UTF-8"?><a>
  <b>test</b>
  <c>test2</c>
</a>


参考文献:

XML Wikipedia