Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB将XML的一部分解组到类中,其余部分作为元素或节点_Java_Jaxb - Fatal编程技术网

Java JAXB将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

是否有一种方法可以将XML文档部分解组到Java类中(例如,达到一定深度),并将其余部分作为节点或元素(甚至是XML字符串或文档),从解组部分可以访问

例如,我有一个XML:

<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);