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>

Я не могу найти способ представить этот тип XML с помощью JAXB Java XML Binding. Возможно ли вообще представить вышеуказанный XML с помощью JAXB Java XML Binding?

Я знаю, что приведенный выше XML плохо разработан, но я не могу изменить решение третьей стороны использовать вместо этого теги и .

Если привязка JAXB XML не будет работать, я был бы очень благодарен за предложения о том, какую библиотеку/инструмент использовать вместо этого для создания XML и выполнения маршалинга/немаршалинга.

Спасибо! Мэтт


person Matt    schedule 27.04.2018    source источник
comment
Я бы посоветовал вам удалить рекомендуемую часть библиотеки/инструмента, поскольку это не по теме.   -  person lexicore    schedule 27.04.2018


Ответы (1)


Да, это возможно. Самым простым было бы использовать комбинацию @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 тоже должны работать и их гораздо проще использовать.

person lexicore    schedule 27.04.2018