java - JAXB:对具有相同值的不同 XML 元素进行解码

标签 java xml jaxb

关于大致相同的主题有很多问题,但我找不到我想要的内容。如果我错过了,我深表歉意。

我正在尝试解码具有公共(public)逻辑元素但使用不同标签定义的 XML 文件:

Xml 输入文件

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

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

我可以这样做:

动物.java

public abstract class Animal {

    public abstract String getVolume();

}

所需要做的就是实现 getVolume()两者皆 Cat.javaDog.java并返回this.barkthis.meow ,分别。

但是,拥有 volume 似乎更干净Animal.java 中的属性并以某种方式告诉 JAXB 将这两个字段映射到它。

我是不是想太多了?您将如何实现?

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

最佳答案

你会:

  1. Animal 类标记为 @XmlTransient 以将其作为映射类删除。
  2. 重写每个子类中的 getVolume() 方法,并对其进行注释以匹配该类所需的元素。

对于这个特定的模型,我的偏好是每个动物都有一个 volume 元素。

关于java - JAXB:对具有相同值的不同 XML 元素进行解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26755269/

相关文章:

java - 如何按值而不是键对 HashMap 进行排序

java - 如何从用户输入返回最大值和最大计数

Java字符串分割不带空格

java - 解码 JAXB 的 WebLogic 12c 迁移问题

java - 'com.google.api.client.json.jackson2.JacksonFactory' 已弃用。我有哪些选择?

android - 需要 Android 应用程序的工作流程创意

java - 从 XML 文件中获取子字符串

android - 自定义对话框标题的布局

java - jaxb 实体打印为 xml

java - 如何更新 JAXB 中的特殊元素?