如何将 xml 字符串转换为对象。我不知道提前的对象是什么。只是几种可能

use*_*660 3 java jaxb

我有一个 XML 字符串,它可以对应于 jaxb 生成的架构文件的几个对象之一。
我提前不知道它是什么物体。

  • 如何将此 XML 字符串转换为 jaxb xml 对象?某种类型的解组?
  • 如何确定它分配给哪个对象?
  • 从 xml 字符串转换为对象后,如何实例化该对象?

bdo*_*han 5

您可以执行以下操作:

只要有一个根元素通过@XmlRootElementor@XmlElementDecl注释与您的类关联,您就不需要指定要解组的类的类型(请参阅: http ://blog.bdoughan.com/2012/07/jaxb-和-root-elements.html)。

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Foo {

    private String bar;

    public String getBar() {
        return bar;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }

}
Run Code Online (Sandbox Code Playgroud)

演示

要从 中解组,String只需将 包装String在 的实例中StringReader。该unmarshal操作会将 XML 转换为域类的实例。如果您不知道必须使用什么类instanceofgetClass()确定它是什么类型。

import java.io.StringReader;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Foo.class);

        String xml = "<foo><bar>Hello World</bar></foo>";
        StringReader reader = new StringReader(xml);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        Object result = unmarshaller.unmarshal(reader);

        if(result instanceof Foo) {
            Foo foo = (Foo) result;
            System.out.println(foo.getBar());
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

输出

Hello World
Run Code Online (Sandbox Code Playgroud)