用于重复元素块的JAXB注释



我有以下示例XML,我想使用jaxb注释来解组:

<root>
<AAA>
<a>stuff</a>
<b>1</b>
<c>8</c>
<BBB>
<a>more stuff</a>
<b>2</b>
<c>10</c>
<CCC>
<a>other stuff</a>
<b>2</b>
<c>10</c>
</CCC>
</BBB>
</AAA>
</root>

我想把重复的元素考虑到一个类中,比如:

@XmlAccessorType(XmlAccessType.FIELD)
public class SomeName {
private String a;
private String b;
private String c;
}

有没有一种方法可以对此进行注释,而不必重复每个类别AAA、BBB、CCC中的属性?

@XmlAccessorType(XmlAccessType.FIELD)
public class AAA {
**@WhatToUseHere?**
private SomeName someName;
private BBB bbb;
}

你已经走上了正轨。你的SomeName级很好。

但是您需要定义其他类AAABBBCCC通过扩展CCD_ 5
(如果你还是Java新手,那么你可能想先阅读更多关于继承的内容。)

通过这样做,这3个类包含所有成员(abc)来自它们的超类CCD_ 9
JAXB与Java继承配合使用效果良好。因此,3个XML元素<AAA><BBB><CCC>自动包含所有子元素<a><b><c>

@XmlAccessorType(XmlAccessType.FIELD)
public class AAA extends SomeName {
@XmlElement(name="BBB")
private BBB bbb;
}


@XmlAccessorType(XmlAccessType.FIELD)
public class BBB extends SomeName {
@XmlElement(name="CCC")
private CCC ccc;
}


@XmlAccessorType(XmlAccessType.FIELD)
public class CCC extends SomeName {
}

最后是根元素:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlElement(name = "AAA")
private AAA aaa;
}

另请注意:
一些Java成员用@XmlElement(name="something")进行了注释以显式设置相应XML元素的名称。如果不这样做,那么Java成员将被映射到XML元素使用相同的名称。例如:Java成员private AAA aaa将被映射到XML元素CCD_ 18(而不是CCD_。

最新更新