TyC*_*TyC 11 java xml jaxb marshalling
我正在使用我的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)
假设您想要文档的默认命名空间http://www.namespace.com,您可以执行以下操作:
演示
该XMLStreamWriter.setDefaultNamespace(String)和XMLStreamWriter.writeNamespace(String, String)方法将被用于设置和编写XML文档的默认命名空间.
package forum9297872;
import javax.xml.bind.*;
import javax.xml.stream.*;
public class Demo {
public static void main(String[] args) throws Exception {
XMLStreamWriter writer = XMLOutputFactory.newFactory().createXMLStreamWriter(System.out);
writer.setDefaultNamespace("http://www.namespace.com");
JAXBContext jc = JAXBContext.newInstance(WorkSet.class);
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
writer.writeStartDocument();
writer.writeStartElement("http://www.namespace.com", "Import");
writer.writeNamespace("", "http://www.namespace.com");
writer.writeStartElement("WorkSets");
m.marshal(new WorkSet(), writer);
m.marshal(new WorkSet(), writer);
writer.writeEndDocument();
writer.close();
}
}
Run Code Online (Sandbox Code Playgroud)
工作集
我的假设是您在JAXB模型中指定了名称空间信息.
package forum9297872;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="WorkSet", namespace="http://www.namespace.com")
public class WorkSet {
}
Run Code Online (Sandbox Code Playgroud)
产量
以下是运行演示代码的输出:
<?xml version="1.0" ?><Import xmlns="http://www.namespace.com"><WorkSets><WorkSet></WorkSet><WorkSet></WorkSet></WorkSets></Import>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25459 次 |
| 最近记录: |