JAXB:使用相同的值解组不同的XML元素

时间:2014-11-05 10:46:00

标签: java xml jaxb

关于大致相同的主题存在大量问题,但我找不到我想要的内容。如果我错过了,我很抱歉。

我正在尝试解组具有共同逻辑元素但使用不同标记定义的XML文件:

Xml输入文件

<xml>
  <animals>
    <dog>
      <bark>loud</bark>
    </dog>
    <cat>
      <meow>frail</meow>
    </cat>      
  </animals>
</xml>

<bark><meow>实际上隐藏了相同的概念,动物的“音高”或“音量”,定义为String

我可以这样做:

Animal.java

public abstract class Animal {

    public abstract String getVolume();

}

只需在getVolume()Cat.java中实施Dog.java,然后分别返回this.barkthis.meow

然而,在volume中拥有Animal.java属性似乎更加清晰,并以某种方式告诉JAXB将这两个字段映射到它。

我是否过度思考这个?你会如何实现?

(当然,我无法控制输入XML。如果可能的话,我也想避免使用MOXy的解决方案,因为推动对该项目的另一个依赖可能很困难。)

2 个答案:

答案 0 :(得分:2)

你会:

  1. Animal类标记为@XmlTransient,将其作为映射类删除。
  2. 覆盖每个子类中的getVolume()方法,对其进行注释以匹配该类的所需元素。
  3. 对于这个特定的模型,虽然我的偏好是每只动物都有一个volume元素。

答案 1 :(得分:0)

JAXB实际上有几种多态机制。您可以使用 @XmlDescriminatorNode / @XmlDescrimintatorValue(Eclipse MOXy)或替换组。

以下是一些详细信息和代码示例:substitution groupsdescriminators

相关问题