Java JAXB将XML的一部分解组到类中,其余部分作为元素或节点
是否有一种方法可以将XML文档部分解组到Java类中(例如,达到一定深度),并将其余部分作为节点或元素(甚至是XML字符串或文档),从解组部分可以访问 例如,我有一个XML:Java JAXB将XML的一部分解组到类中,其余部分作为元素或节点,java,jaxb,Java,Jaxb,是否有一种方法可以将XML文档部分解组到Java类中(例如,达到一定深度),并将其余部分作为节点或元素(甚至是XML字符串或文档),从解组部分可以访问 例如,我有一个XML: <customer> <name>Mike</name> <items> <item>Car</item> <item>Boat</item> </items> </customer
<customer>
<name>Mike</name>
<items>
<item>Car</item>
<item>Boat</item>
</items>
</customer>
原因是我对items
部分不感兴趣,我永远不会用Java解析或访问它。
但我需要能够保存它,然后检索它并生成完整的XML文档。另一方面,我将在Java代码中使用name
元素
我希望
项
部分(至少是子元素)的模式可以更改,而无需更改Java类。您可以使用@xmlanyement(lax=true)
来处理此用例。此注释允许您将任何XML解组到Java对象(DOM节点)
封送拆收器将正确写入XML节点
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Customer customer = (Customer) jaxbUnmarshaller.unmarshal(reader);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(customer, System.out);
谢谢我来看看这个功能。您知道我是否可以使用xjb(xjc绑定)将注释放入自动生成的类中吗?请参阅本文,它有一个指向Jaxb文档的链接,如果默认选项不适合您,还提供了一个额外的插件
@XmlRootElement(name = "customer")
public class Customer {
@XmlElement
private String name;
@XmlAnyElement(lax=true)
private Object items;
}
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Customer customer = (Customer) jaxbUnmarshaller.unmarshal(reader);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(customer, System.out);