A と B の 2 つのオブジェクトがあります。これらのオブジェクトは同じクラスからのものです。JAXB を使用してこれらのオブジェクトをマーシャリングする必要があり、出力 XML は次の形式である必要があります。
<Root>
<A>
<ID> an id </ID>
</A>
<B>
<ID> an id </ID>
</B>
</Root>
<!-- Then all A and B attributes must be listed !-->
<A>
<ID> an id </ID>
<attribute1> value </attribute1>
<attribute2> value </attribute2>
</A>
<B>
<ID> an id </ID>
<attribute1> value </attribute1>
<attribute2> value </attribute2>
</B>
JAXB でこの形式を生成するには? どんな助けでも大歓迎です。
更新: より具体的には、次のような Human クラスがあるとします。
@XmlRootElement
public class Human {
private String name;
private int age;
private Integer nationalID;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Integer getNationalID() {
return nationalID;
}
public void setNationalID(Integer nationalID) {
this.nationalID = nationalID;
}
}
メインクラスは次のとおりです。
public class Main3 {
public static void main(String[] args) throws JAXBException {
Human human1 = new Human();
human1.setName("John");
human1.setAge(24);
human1.setNationalID(Integer.valueOf(123456789));
JAXBContext context = JAXBContext.newInstance(Human.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
StringWriter stringWriter = new StringWriter();
m.marshal(human1, stringWriter);
System.out.println(stringWriter.toString());
}
}
出力は次のようになります。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<human>
<age>24</age>
<name>John</name>
<nationalID>123456789</nationalID>
</human>
ここで、出力を次のようにする必要があります。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<human>
<nationalID>123456789</nationalID>
</human>
<human>
<nationalID>123456789</nationalID>
<age>24</age>
<name>John</name>
</human>
そしてこれは、属性なしで (ID のみで) XML オブジェクトのツリーを描画し、ツリーの下にあるすべての定義を描画するのに役立ちます。これは、JAXB またはその他の実装を使用して可能ですか?