開発環境等
インデントを整えるとは?
Javaにてインデントを整える
- JDK 1.8.0_20
インデントを自力で整えることは可能でありますが、面倒な処理になると思います。
インデントされる前の状態(現在)
<book><person>hoge</person><isbn>1234</isbn></book>
インデントされた状態(最終目標)
<book>
<person>hoge</person>
<isbn>1234</isbn>
</book>
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処理などを行っておりません。必要に応じ変更して下さい。