JDKのJAXB実装(JDK 10までJDKに内臓されている実装 = com.sun.xml.bind:jaxb-impl
)を使ってインデント付きのXMLを出力しようとすると、デフォルトだとインデントは半角スペース4文字になります。
モデル
@XmlRootElement
public class User {
private String id;
private String name;
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
JAXBを使ったXML出力処理
User user = new User();
user.setId("001");
user.setName("Kazuki");
Marshaller marshaller = JAXBContext.newInstance(User.class).createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter writer = new StringWriter();
marshaller.marshal(user, writer);
System.out.println(writer.toString());
出力されるXML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
<id>001</id>
<name>Kazuki</name>
</user>
JDKのJAXB実装を使ってインデント文字列を指定する
JDKのJAXB実装を利用する場合は、com.sun.xml.internal.bind.indentString
プロパティにインデント文字列を指定することができます。
インデント文字列の指定例
User user = new User();
user.setId("001");
user.setName("Kazuki");
Marshaller marshaller = JAXBContext.newInstance(User.class).createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty("com.sun.xml.internal.bind.indentString", " "); // 半角スペース2文字
StringWriter writer = new StringWriter();
marshaller.marshal(user, writer);
System.out.println(writer.toString());
出力されるXML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
<id>001</id>
<name>Kazuki</name>
</user>
まとめ
JDKのJAXB実装だと簡単にインデント文字数を変更することができました。他の実装はどうなのかな!?