2016-02-10 2 views
3

Я думал о создании Java-генератора XML-файлов, которые затем загружаются другой программой Java (я не могу изменить код там). Очевидным ответом был JAXB, однако я наткнулся на проблему.Сменная структура XML в JAXB?

Я хочу XML, чтобы быть немного более настраиваемый:

<HeadTag> 
    <firsElement> 
    <att1/> 
    <att2/> 
    <att3/> 
    </firsElement> 
    <secondElement> 
    <att3/> 
    <att4/> 
    <att5/> 
    <att6/> 
    </secondElement> 
</HeadTag> 
<HeadTag> 
    <firsElement> 
    <att1/> 
    <att2/> 
    <att3/> 
    </firsElement> 
</HeadTag> 
<HeadTag> 
    <secondElement> 
    <att3/> 
    <att4/> 
    <att5/> 
    <att6/> 
    </secondElement> 
</HeadTag> 

Все три XMLs будет действительным выход генератор. Я создал Java Class для fistElement, secondElement и т. Д. (Их много), но я не могу понять, как добавить их все под одним элементом HeadTag.

У меня есть много элементов, более 500, поэтому размещение их в качестве полей в классе является отвратительным.

ответ

1

Если вы можете позволить себе свои элементы классы расширяет абстрактный класс, вы можете попробовать это:

@XmlAccessorType(XmlAccessType.FIELD) 
public abstract class Element{}; 

@XmlAccessorType(XmlAccessType.FIELD) 
public class FirstElement extends Element{ ... }; 

@XmlAccessorType(XmlAccessType.FIELD) 
public class SecondElement extends Element{ ... }; 

//Other elements classes 

@XmlRootEntity 
@XmlAccessorType(XmlAccessType.FIELD) 
public class HeadTag{ 
    @XmlElements({ 
     @XmlElement(name="firstElement",type=FirstElement.class), 
     @XmlElement(name="secondElement",type=SecondElement.class), 
     //One for each of your classes 
    }) 
    private List<Element> elements; 
} 

Вы все еще будете иметь много @XmlElement аннотации, но вы не будете иметь 500+ поля в вашем классе.

+0

Спасибо. Я думаю, что это так хорошо, как может получиться :). – everyonecancode