Java 如何告诉JAXB,元素是根的子元素?

Java 如何告诉JAXB,元素是根的子元素?,java,xml,unmarshalling,Java,Xml,Unmarshalling,我有一些XML格式的测试数据,我想映射到POJO <Root> <Child1> <Data> </Data> </Child1> <Child2> <Data> </Data> </Child2> </Root> 在本例中,对象只是一个占位符 @Getter @Setter @XmlRootElemen

我有一些XML格式的测试数据,我想映射到POJO

<Root>
   <Child1>
      <Data>
      </Data>
   </Child1>
   <Child2>
      <Data>
      </Data>
   </Child2>
</Root>
在本例中,对象只是一个占位符

@Getter
@Setter
@XmlRootElement(name = "TestData")
public class Child1 {

    @XmlElement(name = "ID")
    private String ID;
}

这是我目前正在使用的代码,但我遇到了以下异常:

javax.xml.bind.UnmarshaleException:意外元素(URI:“”), 洛卡尔:“测试数据”)。预期的元素为:Child1

移动注释

@XmlRootElement(name=“TestData”)

到您的根类,并将其更改为

@XmlRootElement(name=“Root”)

我相信你需要

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Child1")
在儿童班

再试试看

异常告诉您的是,它需要一个名称为TestData、名称空间为“”的元素(您现在可以忽略名称空间,因为它是空的,但需要花一两分钟的时间来查看,因为这是第一次使用XML时可能会绊倒您的东西),这是因为您将根元素定义为TestData

此外,您提供的数据示例似乎与您设计的类不符

<Child1>
    <Data>
    </Data>
</Child1>

public class Child1 {

    @XmlElement(name = "ID")
    private String ID;
}

公营儿童1{
@xmlement(name=“ID”)
私有字符串ID;
}
我不知道您是否为了更简洁的问题而替换了封闭的数据,但是您的Java对象会更像这个XML

<Child1>
   <ID>[String ID value]</ID>
</Child1>

[字符串ID值]

Child1
不是根元素,所以不要用
XmlRootElement
注释,而是用
XmlElement
XmlType
注释。我编辑了我的问题,请再看一遍。感谢您的支持。您现在有了一个不同的问题,当您的原始问题解决后,请尝试不要编辑它以请求其他问题的解决方案,因为这意味着问题可能会变得混乱,将来如果有人有相同的问题,他们可能更难解决。请将编辑还原为问题,检查是否能找到新问题的解决方案,如果不能,请创建新问题。还原我的编辑并将您的答案标记为解决方案!
<Child1>
   <ID>[String ID value]</ID>
</Child1>