首页javajaxbJava HTML/XML - 如何将具有不同rootelement名称的两个xml映射到同一个java对象

Java HTML/XML - 如何将具有不同rootelement名称的两个xml映射到同一个java对象

我们想知道如何将具有不同rootelement名称的两个xml映射到同一个java对象。
import java.io.StringReader;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;

public class Main {
  public static void main(String[] args) throws Exception {
    String xml1 = "<abc><name>hello</name></abc>";
    String xml2 = "<xyz><name>hello</name></xyz>";
    Unmarshaller unmarshaller = JAXBContext.newInstance(Foo.class)
        .createUnmarshaller();
    Object o1 = unmarshaller.unmarshal(new StringReader(xml1));
    Object o2 = unmarshaller.unmarshal(new StringReader(xml2));
    System.out.println(o1);
    System.out.println(o2);
  }

  @XmlSeeAlso({ Foo.Foo_1.class, Foo.Foo_2.class })
  static class Foo {
    @XmlRootElement(name = "abc")
    static class Foo_1 extends Foo {
    }

    @XmlRootElement(name = "xyz")
    static class Foo_2 extends Foo {
    }

    @XmlElement
    String name;

    @Override
    public String toString() {
      return "Foo{name='" + name + '\'' + '}';
    }
  }
}