关于大致相同的主题存在大量问题,但我找不到我想要的内容。如果我错过了,我很抱歉。
我正在尝试解组具有共同逻辑元素但使用不同标记定义的XML文件:
<xml>
<animals>
<dog>
<bark>loud</bark>
</dog>
<cat>
<meow>frail</meow>
</cat>
</animals>
</xml>
<bark>
和<meow>
实际上隐藏了相同的概念,动物的“音高”或“音量”,定义为String
。
我可以这样做:
public abstract class Animal {
public abstract String getVolume();
}
只需在getVolume()
和Cat.java
中实施Dog.java
,然后分别返回this.bark
或this.meow
。
然而,在volume
中拥有Animal.java
属性似乎更加清晰,并以某种方式告诉JAXB将这两个字段映射到它。
我是否过度思考这个?你会如何实现?
(当然,我无法控制输入XML。如果可能的话,我也想避免使用MOXy的解决方案,因为推动对该项目的另一个依赖可能很困难。)
答案 0 :(得分:2)
你会:
Animal
类标记为@XmlTransient
,将其作为映射类删除。getVolume()
方法,对其进行注释以匹配该类的所需元素。对于这个特定的模型,虽然我的偏好是每只动物都有一个volume
元素。
答案 1 :(得分:0)
JAXB实际上有几种多态机制。您可以使用
@XmlDescriminatorNode
/ @XmlDescrimintatorValue
(Eclipse MOXy)或替换组。
以下是一些详细信息和代码示例:substitution groups,descriminators