我正在使用我的marshaller的JAXB_FRAGMENT属性来编组WorkSet级别.问题在于,当我封送它时,每次都为WorkSet元素提供xmlns属性.有没有办法编组,以便它不附加xmlns属性?这是我的XML的样子.
<Import>
<WorkSets>
<WorkSet xmlns="http://www.namespace.com">
<Work>
<Work>
...
..
...
</WorkSet>
<WorkSet xmlns="http://www.namespace.com">
<Work>
<Work>
...
</WorkSet>
</WorkSets>
</Import>
Run Code Online (Sandbox Code Playgroud)
这是我正在使用上面创建的代码:
FileOutputStream fos = new FileOutputStream("import.xml");
XMLStreamWriter writer = XMLOutputFactory.newFactory().createXMLStreamWriter(fos);
JAXBContext jc = JAXBContext.newInstance(WorkSet.class);
Marshaller m = jc.createMarshaler();
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
writer.writeStartDocument();
writer.writeStartElement("Import");
writer.writeAttribute("xmlns","http://www.namespace.com");
writer.writeStartElement("WorkSets");
while(hasWorkSet){
m.marshal(workSet, writer)
}
writer.writeEndDocument();
writer.close();
Run Code Online (Sandbox Code Playgroud) 我不确定jaxb是否可以使用以下问题,但无论如何我都会问.
在某个项目中,我们使用带有定义模式的jaxb来创建xml文件的下一个结构.
<aaa>
<bbb>
more inner children here
</bbb>
<bbb>
more inner children here
</bbb>
</aaa>
Run Code Online (Sandbox Code Playgroud)
我们还使用自动类生成jaxb来创建类:aaa和bbb,其中aaa是作为@XmlRootElement生成的.
我们现在想要在新项目中使用相同的模式,该模式也将与之前的项目兼容.我想做的是使用相同的jaxb生成的类,而不对模式进行任何更改,以便只将一个bbb对象编组为xml.
JAXBContext jc = JAXBContext.newInstance("generated");
Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(bbb, writer);
Run Code Online (Sandbox Code Playgroud)
所以我们会得到下一个结果:
<bbb>
<inner child1/>
<inner child2/>
...
</bbb>
Run Code Online (Sandbox Code Playgroud)
我目前无法这样做,因为marshaller大喊我没有定义@XmlRootElement.
我们实际上试图避免将模式分成2个模式的情况,其中一个是bbb,另一个是aaa导入bbb.
提前致谢!