我在使用Marshaller.JAXB_FRAGMENT属性成功编组时遇到了一些麻烦.这是我想要输出的XML的简单版本.
<Import>
<WorkSets>
<WorkSet>
<Work>
<Work>
...
..
...
</WorkSet>
<WorkSet>
<Work>
<Work>
...
</WorkSet>
<WorkSets>
<Import>
Run Code Online (Sandbox Code Playgroud)
的<Import>和<WorkSets>元件基本上围住了大量的只是容器元素<WorkSet>&<Work>元件.我现在正试图在马萨诸塞州<WorkSet>.
<Import>和<WorkSets>元素,然后从元素编组<WorkSet>并将输出封装在<Import><WorkSets>标签中?xmlns='http://namespace.com'属性附加到WorkSet标记时,有没有一种方法可以在没有将namespace属性附加到Workset的情况下编组?Oph*_*ian 17
基本上,它听起来不是使用容器对象构造完整的对象树,而是希望能够使用JAXB将一组WorkSet实例流式化为marshal.
我将采用的方法是使用XMLStreamWriter并通过将它们包装在JAXBElement中来封送WorkSet对象.我手边没有测试过的示例代码,所以这里是粗略的代码片段,可以让你在写入轨道上:
FileOutputStream fos = new FileOutputStream("foo.xml");
XMLStreamWriter writer = XMLOutputFactory.newFactory().createXMLStreamWriter(fos);
writer.writeStartDocument();
writer.writeStartElement("Import");
writer.writeStartElement("WorkSets");
JAXBContext context = JAXBContext.newInstance(WorkSet.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
for (WorkSet instance : instances)
{
JAXBElement<WorkSet> element = new JAXBElement<WorkSet>(QName.valueOf("WorkSet"), WorkSet.class, instance);
m.marshal(element, writer);
}
writer.writeEndDocument(); // this will close any open tags
writer.close();
Run Code Online (Sandbox Code Playgroud)
注意:以上内容是完全未经测试的,可能会在包装部分中弄乱一些东西来编写WorkSet的每个实例.您需要包装WorkSet实例,因为它们不会被注释,@XmlRootElement否则JAXB将拒绝封送对象.
| 归档时间: |
|
| 查看次数: |
9827 次 |
| 最近记录: |