是否有办法将XML文档部分解组到Java类中(例如,直到某个深度),并将其余部分保留为节点或元素(甚至是XML字符串或文档),可以从未编组的部分访问。
E.g。我有一个XML:
<customer>
<name>Mike</name>
<items>
<item>Car</item>
<item>Boat</item>
</items>
</customer>
和Java类:
@XmlRootElement
public class Customer {
@XmlElement
private String name;
// something like this:
private Node items;
// or like this:
// private String items;
}
原因是因为我对items
部分不感兴趣,我将永远不会用Java解析或访问它。
但我需要能够保存它,然后检索它并生成一个完整的XML文档。另一方面,我将在Java代码中使用name
元素。
我希望在不必更改Java类的情况下更改items
部分的模式(至少是子元素)。
答案 0 :(得分:0)
您可以使用@XmlAnyElement(lax=true)
来处理此用例。此批注允许您将任何XML解组为Java对象(DOM节点)。
@XmlRootElement(name = "customer")
public class Customer {
@XmlElement
private String name;
@XmlAnyElement(lax=true)
private Object items;
}
marshaller将正确编写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);