首页 文章

JAXB生成的奇怪的XML结构

提问于
浏览
2

为什么我会得到这种结构?我本来期望测验 - >问题 - >和两个问题元素,而不是两个问题元素?

@XmlRootElement
public class Quiz {

    private List<Question> questions;

    public Quiz() {
        questions = new ArrayList<Question>();
    }

    public List<Question> getQuestions() {
        return questions;
    }

    public void setQuestions(List<Question> questions) {
        for (Question question : questions) {
            addQuestion(question);
        }
    }

    public void addQuestion(final Question question) {
        if (!(questions.contains(question))) {
            questions.add(question);
        }
    }

    public void removeQuestion(final Question question) {
        if (questions.contains(question)) {
            questions.remove(question);
        }
    }

    public int numberOfQuestions() {
        return questions.size();
    }
}

题:

@XmlRootElement
public class Question extends AbstractModel {

}

<quiz><questions></questions><questions></questions></quiz>

2 回答

  • 2

    默认情况下,JAXB(JSR-222)实现不提供分组元素 . 您可以使用 @XmlElementWrapper 获取一个 .

    @XmlElementWrapper
    @XmlElement(name="question")
    public List<Question> getQuestions() {
        return questions;
    }
    

    For More Information

  • 3

    我怀疑你的收藏品(即 - "getQuestions")没有注释好 .
    如果您打算使用Question对象列表或扩展Question的对象,则应考虑使用XmlRefElement(例如,
    如果您有StudentQuestion和LecturerQuestion扩展问题,并且您希望将这些对象添加到集合中)
    如果你想将"Questions"的"Questions"放在"Question"上,那么看起来像是这样的XML:

    <Questions>
       <Question></Question>
       <Question></Questions>
    </Question>
    

    您应该使用 @XmlElementWrapper(name="Questions") 注释该集合

相关问题