当前位置: 首页 > 面试题库 >

JAXB:同一元素的多个名称的XML编组

拓拔麒
2023-03-14
问题内容

我认为对于真正了解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<Employees> employees每个员工只有一个firstName和lastName。

(注意:每个员工的类型Employee都不是NOT
Director/Manager/Staff。在解组时子类信息会丢失。我们也不在乎编组数据,我们只需要从XML创建对象)

如果没有像MOXy这样的扩展程序,可以做到吗?定制的bindings.xjb文件可以保存一天吗?


问题答案:

这对应于选择结构。您可以@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看起来像这样: 这给了

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

  • 我想让JAXB列表到xml,其中命名空间只出现在根元素中,而不是在任何其他元素中: 我已经尝试了package level @XmlSchema,但是我一定是做错了什么,因为没有显示任何东西。 这是我的根元素类: 我还有以下包-info.java:

  • 我正在尝试使用jaxb创建XML,如下所示,其中子元素有单独的命名空间。 我的班级 但我正在像下面这样生成xml,其中子模式位于根级别。 我在package-info.java定义了@xmlschema 当我生成xml时,子元素的名称空间没有被生成,我只得到根元素的命名空间。

  • 我有这种结构的xml文件: 有没有可能将这种XML解组到一个对象中。问题是每个元素都有一些独特的标签。我想把这些值放到列表中,但是我不知道怎么做。