我有以下示例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;
}
答案 0 :(得分:0)
你已经走在正确的轨道上了。
你的班级SomeName
没问题。
但是你需要定义其他类AAA
,BBB
和CCC
通过延长SomeName
(如果您还是Java新手,那么您可能需要先阅读有关Inheritance的更多信息。)
通过这样做,这3个类包含所有成员(a
,b
,c
)
来自他们的超类SomeName
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元素<aaa>
(不是<AAA>
)。