Wenn Sie versuchen, eingerücktes XML mithilfe der JAXB-Implementierung des JDK auszugeben (in das JDK integrierte Implementierung bis JDK 10 = com.sun.xml.bind: jaxb-impl), ist der Einzug standardmäßig ein Leerzeichen mit halber Breite. Es werden 4 Zeichen sein.
Modell-
@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;
  }
}
XML-Ausgabeverarbeitung mit JAXB
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 ausgeben
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
    <id>001</id>
    <name>Kazuki</name>
</user>
Wenn Sie die JAXB-Implementierung des JDK verwenden, können Sie in der Eigenschaft com.sun.xml.internal.bind.indentString eine Einrückungszeichenfolge angeben.
Beispiel für die Angabe einer Zeichenfolge
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 Einzelbyte-Leerzeichen
StringWriter writer = new StringWriter();
marshaller.marshal(user, writer);
System.out.println(writer.toString());
XML ausgeben
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
  <id>001</id>
  <name>Kazuki</name>
</user>
Mit der JAXB-Implementierung des JDK war es möglich, die Anzahl der eingerückten Zeichen einfach zu ändern. Was ist mit anderen Implementierungen! ??
Recommended Posts