Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB中的可变XML结构?_Java_Xml_Jaxb - Fatal编程技术网

Java JAXB中的可变XML结构?

Java JAXB中的可变XML结构?,java,xml,jaxb,Java,Xml,Jaxb,我正在考虑创建XML文件的Java生成器,然后由另一个Java程序加载这些文件(我不能在那里更改代码)。显而易见的答案是JAXB,但我偶然发现了一个问题 我希望XML更加可定制: 这三个XML都是生成器的有效输出。我已经为fistElement、secondElement等创建了Java类(有很多),但我不知道如何将它们全部添加到一个HeadTag元素下 我有很多元素,超过500个,所以把它们作为一个字段放在课堂上有点难看 如果您有能力让elements类扩展抽象类,您可以尝试以下方

我正在考虑创建XML文件的Java生成器,然后由另一个Java程序加载这些文件(我不能在那里更改代码)。显而易见的答案是JAXB,但我偶然发现了一个问题

我希望XML更加可定制:




这三个XML都是生成器的有效输出。我已经为fistElement、secondElement等创建了Java类(有很多),但我不知道如何将它们全部添加到一个HeadTag元素下


我有很多元素,超过500个,所以把它们作为一个字段放在课堂上有点难看

如果您有能力让elements类扩展抽象类,您可以尝试以下方法:

@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;
}
@xmlacessortype(xmlacesstype.FIELD)
公共抽象类元素{};
@XmlAccessorType(XmlAccessType.FIELD)
公共类FirstElement扩展元素{…};
@XmlAccessorType(XmlAccessType.FIELD)
公共类SecondElement扩展元素{…};
//其他元素类别
@XmlRootEntity
@XmlAccessorType(XmlAccessType.FIELD)
公共类头牌{
@XmlElements({
@XmlElement(name=“firstElement”,type=firstElement.class),
@XmlElement(name=“secondElement”,type=secondElement.class),
//每个班一个
})
私有列表元素;
}
您仍然会有很多@XmlElement注释,但您的类中不会有500多个字段