2 回答
TA贡献1801条经验 获得超15个赞
只需找到一个快速的方法来做到这一点:
注册 pojo。
JAXBContext context = JAXBContext.newInstance(Analyst.class, Commentator.class);
处理输入。我正在将 str-xml 转换为 StreamSource。
String xml = "<Author> <id>1</id> <name>A</name> <title>B</title> <address>C</address></Author>"; StreamSource source = new StreamSource(new ByteArrayInputStream(xml.getBytes()));
创建解组器。
Unmarshaller unmarshaller = context.createUnmarshaller();
(重要)当你解组数据时,给出第二个参数(你想要解组的类)
JAXBElement<Analyst> unmarshal = unmarshaller.unmarshal(source, Analyst.class);
然后,得到你想要的:
Analyst analyst = unmarshal.getValue();
如果需要另一个 pojo。(注意
unmarshaller
&source
不能在方法中重用)
JAXBElement<Commentator> unmarshal2 = unmarshaller2.unmarshal(source2, Commentator.class);
进而:
Commentator com = unmarshal2.getValue();
没有错误报告,结果是正确的。
TA贡献1795条经验 获得超7个赞
在我看来,将多个 Java 类映射到相同的@XmlRootElement. 但无论如何,你仍然能够实现你想要的。
你需要不同的JAXBContextsAnalyst和Commentator。
而且因为 aJAXBContext是一个大对象并且JAXBContext.newInstance(...)需要很长时间来执行,所以将这些JAXBContext实例保存在static变量中并重用它们而不是创建新实例是有意义的:
private static JAXBContext analystContext;
private static JAXBContext commentatorContext;
if (analystContext == null)
analystContext = JAXBContext.newInstance(Analyst.class);
if (commentatorContext == null)
commentatorContext = JAXBContext.newInstance(Commentator.class);
因此,您还需要Unmarshaller从它们创建不同的s:
Unmarshaller analystUnmarshaller = analystContext.createUnmarshaller();
Unmarshaller commentatorUnmarshaller = commentatorContext.createUnmarshaller();
然后您可以将相同的 XML 内容解组到不同的根类:
String xml = "<Author> <id>1</id> <name>A</name> <title>B</title> <address>C</address></Author>";
Analyst analyst = (Analyst) analystUnmarshaller.unmarshal(new ByteArrayInputStream(xml.getBytes()));
Commentator commentator = (Commentator) commentatorUnmarshaller.unmarshal(new ByteArrayInputStream(xml.getBytes()));
添加回答
举报