LoginSignup
3
2

More than 3 years have passed since last update.

JDKのJAXB実装でインデントを半角スペース2文字にする方法

Posted at

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実装だと簡単にインデント文字数を変更することができました。他の実装はどうなのかな!?

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2