我有以下示例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
级很好。
但是您需要定义其他类AAA
、BBB
和CCC
通过扩展CCD_ 5
(如果你还是Java新手,那么你可能想先阅读更多关于继承的内容。)
通过这样做,这3个类包含所有成员(a
、b
、c
)来自它们的超类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_。