Я использую свойство JAXB_FRAGMENT для моего маршаллера для маршалирования на уровне WorkSet. Проблема в том, что когда я маршал, он каждый раз придает элементу WorkSet атрибут xmlns. Есть ли способ маршалировать, чтобы он не привязывал атрибут xmlns? Вот как выглядит мой XML.JAXB Фрагмент маршала без пространства имен
<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();
Вы хотите иметь объявление пространства имен выше в документе, или вы не хотите, чтобы пространство имен было объявлено вообще? –
@BlaiseDoughan Я пишу теги Import и WorkSets вручную через XMLStreamWriter, поэтому я также устанавливаю их атрибуты вручную. Я использую JAXB для маршалирования коллекции экземпляров WorkSet, которая работает нормально, я просто не хочу, чтобы атрибут xmlns привязывался к каждому. Он не помещал атрибуты xmlns в WorkSet, когда я использовал JAXB для совместного использования всего экземпляра XML (Import, Worksets, WorkSet, Work ..). Это началось только тогда, когда я переключил JAXB_FRAGMENT на маршалирование только WorkSet. – TyC
@BlaiseDoughan Я просматривал API JAXB и до сих пор не вижу, что заставляет пространство имен помещаться в элемент WorkSet. – TyC