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

How to tell JAXB that, the element is a Child of the Root?

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

<Root>
   <Child1>
      <Data>
      </Data>
   </Child1>
   <Child2>
      <Data>
      </Data>
   </Child2>
</Root>

Child1 是第一个 Object,Child2 是第二个。

JAXBContext context = JAXBContext.newInstance(classesToLoad);
Unmarshaller um = context.createUnmarshaller();
Object obj = (Object) um.unmarshal(data);

Object 在这种情况下只是一个占位符

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

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

.

这是我现在正在使用的代码,但我遇到了这个异常:

javax.xml.bind.UnmarshalException: unexpected Element (URI:"", lokal:"TestData"). expectected elements are: Child1

移动注释

@XmlRootElement(name = "TestData")

到你的根 class 并将其更改为

@XmlRootElement(name = "Root")

我相信你会需要

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Child1")

在 Child1 class.

再试一次。

异常告诉你的是它期待一个名称为 TestData 的元素,名称空间为“”(你现在可以忽略名称空间,因为它是空白的,但花一两分钟时间看一下 this,因为它是第一次使用 XML 时可能会让您感到困惑),这是因为您将根元素定义为 TestData.

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

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

public class Child1 {

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

我不知道您是否为了更简洁的问题而为简洁起见替换了随附的数据,但是您的 Java 对象将更类似于此 XML.

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