【问题标题】:JAXB: unmarshalling xml with multiple names for the same elementJAXB:为同一元素解组具有多个名称的 xml
【发布时间】:2012-06-23 02:23:02
【问题描述】:

我认为这对于真正了解 JAXB 绑定文件的人来说会很容易......

基本问题

如何配置 JAXB 以将多个元素解组到同一个类中?

注意:我想避免向我的项目添加另一个依赖项(如 MOXy)。理想情况下,这可以通过注释或自定义绑定文件来完成。

背景

我有一个 XML 文档,其中包含相同元素的许多变体——每个变体都具有完全相同的属性。使用下面的示例,我只关心“员工”,但 XML 指定了“董事、经理和员工”。出于我们的目的,这些都是同一个父类的所有子类,我们只需要使用父类型 (Employee),我们的对象模型没有或不需要子类的实例。

我希望 JAXB 将 director, manager, or staff 元素的任何实例绑定到 Employee 对象中。

示例

输入:

<organization>
    <director>
        <fname>Dan</fname>
        <lname>Schman</lname>
    </director>    
    <manager>
        <fname>Joe</fname>
        <lname>Schmo</lname>
    </manager>    
    <staff>
        <fname>Ron</fname>
        <lname>Schwan</lname>
    </staff>    
    <staff>
        <fname>Jim</fname>
        <lname>Schwim</lname>
    </staff>    
    <staff>
        <fname>Jon</fname>
        <lname>Schwon</lname>
    </staff>    
</organization>

输出:

解组此示例后,我将得到一个具有一个属性的 Organization 对象:List&lt;Employees&gt; employees,其中每个员工只有一个名字和姓氏。

(注意:每个员工的类型都是Employee而不是Director/Manager/Staff。解组时子类信息会丢失。我们也不关心编组返回——我们只需要从XML创建对象)

没有像 MOXy 这样的扩展可以做到这一点吗?自定义 bindings.xjb 文件可以节省时间吗?

【问题讨论】:

  • 希望@BlaiseDoughan 会看到您的问题,因为他最近一直活跃在这个网站上,并且他和任何人一样了解他的 JAXB。 His blog 值得一读。
  • 那太好了。如果是这样的话……我得到了各种各样的支持和代表点,上面写着他的名字! ;)

标签: java xml binding jaxb unmarshalling


【解决方案1】:

这对应于一个选择结构。您可以为此用例使用 @XmlElements 注释:

@XmlElements({
    @XmlElement(name="director", type=Employee.class),
    @XmlElement(name="manager", type=Employee.class)
})
List<Employee> getEmployees() {
    return employees;
}

如果您从 XML 模式开始,以下内容会有所帮助:

【讨论】:

  • 您,先生,真是个天才!像魅力一样工作!
  • 作为后续:是否有任何简单的方法来保留原始元素名称(例如将其作为属性传递给正在创建的对象)?
  • 在 JAXB 中,您可以将结果包装在 JAXBElement 中。将该值存储在属性中的功能是我们正在考虑添加到 MOXy 的功能。
  • @gmale - 您可以在此处对增强请求进行正式投票:bugs.eclipse.org/bugs/show_bug.cgi?id=298125
  • @BigBen - 我看到你已经想通了:stackoverflow.com/a/15917708/383861(我给你的问题和答案都给了 +1)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 2014-08-02
  • 1970-01-01
  • 2013-03-24
  • 2011-07-16
  • 1970-01-01
相关资源
最近更新 更多