我有一个 XML 字符串,它可以对应于 jaxb 生成的架构文件的几个对象之一。
我提前不知道它是什么物体。
您可以执行以下操作:
富
只要有一个根元素通过@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 转换为域类的实例。如果您不知道必须使用什么类instanceof或getClass()确定它是什么类型。
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)