关于大致相同的主题有很多问题,但我找不到我想要的内容。如果我错过了,我深表歉意。
我正在尝试解码具有公共(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.java
和Dog.java
并返回this.bark
或this.meow
,分别。
但是,拥有 volume
似乎更干净Animal.java
中的属性并以某种方式告诉 JAXB 将这两个字段映射到它。
我是不是想太多了?您将如何实现?
(当然,我无法控制输入 XML。如果可能的话,我还希望避免使用 MOXy 的解决方案,因为插入对该项目的另一个依赖项可能很困难。)
最佳答案
你会:
- 将
Animal
类标记为@XmlTransient
以将其作为映射类删除。 - 重写每个子类中的
getVolume()
方法,并对其进行注释以匹配该类所需的元素。
对于这个特定的模型,我的偏好是每个动物都有一个 volume
元素。
关于java - JAXB:对具有相同值的不同 XML 元素进行解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26755269/