我正在使用我的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>
这是我正在使用上面创建的代码:
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();
3 回答
假设您希望文档的默认命名空间为
http://www.namespace.com
,则可以执行以下操作:Demo
XMLStreamWriter.setDefaultNamespace(String)
和XMLStreamWriter.writeNamespace(String, String)
方法将用于设置和写入XML文档的默认命名空间 .WorkSet
我的假设是您在JAXB模型中指定了名称空间信息 .
Output
以下是运行演示代码的输出:
有三种解决方法 .
1)为workerets的容器创建JAXB注释对象 . 将workersets添加到该对象,然后整理整个对象 .
2)按照101 ways to marshal objects with JAXB中的第一个示例,使用
DocumentBuilderFactory
并识别名称空间 .3)假设jaxb对象位于一个永远不具有限定名称空间的包中,您可以将以下内容添加到包注释中:(注意:自从我完成此操作已经有一段时间了,我没有测试过这段代码)
再举一个例子: