首页 > 解决方案 > 没有父元素的 JAXB XML 重复交替 XmlElements

问题描述

我们一直在使用 JAXB 生成 XML 以与第三方交互。该第三方要求对于一个部分,我们以重复的方式生成一组 2 个不同的 0-n XML 元素,而没有父元素将它们分开。这是请求的示例:

<education>
   <code>ENG24</code>
   <percentage>25</percentage>
   <code>ENG25</code>
   <percentage>20</percentage>
   <code>SPA50</code>
   <percentage>30</percentage>
   <code>SPA60</code>
   <percentage>25</percentage>
</education>

我想不出用 JAXB Java XML Binding 来表示这种类型的 XML 的方法。是否可以使用 JAXB Java XML Binding 来表示上述 XML?

我知道上面的 XML 设计得很糟糕,但我无法改变第三方使用和标记的想法。

如果 JAXB XML 绑定不起作用,我将非常感谢有关使用什么库/工具来生成 XML 和执行编组/取消编组的建议。

谢谢!马特

标签: javaxmljaxbxml-binding

解决方案


对的,这是可能的。最简单的可能是使用@XmlElements/@XmlElement组合:

@XmlElements({
    @XmlElement(name="code", type=String.class),
    @XmlElement(name="percentage", type=Integer.class)
})
public List<Serializable> items;

或者,您也可以使用@XmlElementRef/@XmlElementRef并拥有一个List<JAXBElement<? extends Serializable>> items. 每个项目将是一个JAXBElement<? extends Serializable>携带元素的值和名称的元素。

但是由于您似乎有不同的类型(String/ Integer),@XmlElements/@XmlElement应该也可以工作并且更容易使用。


推荐阅读