当前位置: 首页 > 知识库问答 >
问题:

JAXB:对同一个元素的多个名称解组xml

夹谷星剑
2023-03-14

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

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

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

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

我希望JAXB将总监、经理或员工元素的任何实例绑定到员工对象中。

输入:

<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>

输出:

解组此示例后,我最终会得到一个具有一个属性的组织对象:List

(注:每个员工都属于< code >员工类型,而不是< code >主管/经理/职员。解组时子类信息会丢失。我们也不关心封送返回——我们只需要从XML创建对象)

没有像MOXy这样的扩展能做到这一点吗?自定义bindings.xjb文件能扭转局面吗?

共有1个答案

姚星腾
2023-03-14

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

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

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

  • http://blog.bdoughan.com/2011/04/xml-schema-to-java-xsd-choice.html
 类似资料:
  • 问题内容: 我认为对于真正了解JAXB绑定文件的人来说这很容易… 基本问题 如何配置JAXB将多个元素解组到同一类中? 注意:我想避免向我的项目中添加另一个依赖项(例如MOXy)。 理想情况下,这可以通过注释或自定义绑定文件来完成。 背景 我有一个XML文档,其中包含许多相同元素的变体,每个变体具有完全相同的属性。在下面的示例中,我只关心“雇员”,但是XML指定了“董事,经理和职员”。出于我们的目

  • 我正在尝试解组一个包含多个同名元素的XML文档。我不确定是否需要创建bean的Arraylist并将其传递给解组器。我希望有人能给我一些建议来解决这个问题。我试图解析的XML是一个SOAP响应,但我去掉了信封,所以我只有它的主体,它看起来是这样的: 这是从一个包含50多个字段的表返回的,但我创建了一个testBean,并且我定义了fkdevice只是为了使其简单,我的bean看起来像这样: 这给了

  • 这是我的xml结构 因此,我尝试使用JAXB解组将这个xml绑定到一个类,但结果一无所获。 我在想,我有两个基本元素,课程和科目,所以我根据这些元素建立了两个类 此选项用于控制课程标签 这是为了控制主题标签。 我做了一些字符串函数,结果什么都没有。有什么问题吗?

  • 这与JAXB生成的No@XmlRootElement等问题的方向相反。基本上,我想运行schemagen并拥有两个相同类型的全局元素。 我了解如何使用JAXBElement列表事物,但我不知道如何正确生成模式。在我看来,它看起来像以下片段(@XmlRootElements是虚构的)。

  • 问题内容: 我具有以下XML结构,该结构跨多个XML元素对单个概念进行建模。此格式不在我的控制范围内。 我想在一个数据库中,我确实有控制权,并可以有一个更简单的模型此表,和领域。因此,我想在课堂上解组。 可以通过注释自动完成吗?我目前正在使用JAXB解组到单独的列表和类列表,然后在上对瞬态进行后处理,但是我认为必须有一种更简便的自动方式来映射这些元素。还是XSLT的工作? 可能会知道XML是作为H

  • 我在名称空间方面有问题。我需要从一个公共api (Prestashop)解组。该api使用xml作为xlink类型,如下所示: 每种产品的 API 为: 我为每个XML生成了两个包含pojo类的包。我想从产品列表中获取给定id的任何产品的属性。 我有一个产品,其中包含@XMLSchema命名空间,但这个命名空间仅针对一个路径是静态的。我知道这不是这样做的方法。 下面,我的客户类。 这里有代码:ht