Używam właściwości JAXB_FRAGMENT, aby mój marshaller mógł przeprowadzić operację na poziomie WorkSet. Problem polega na tym, że podczas marszu daje to każdemu elementowi WorkSet atrybut xmlns. Czy istnieje sposób kontrolowania, aby nie dołączyć atrybutu xmlns? Oto jak wygląda mój XML.Fragment JAXB Fragment Marszałka bez przestrzeni nazw
<Import>
<WorkSets>
<WorkSet xmlns="http://www.namespace.com">
<Work>
<Work>
...
..
...
</WorkSet>
<WorkSet xmlns="http://www.namespace.com">
<Work>
<Work>
...
</WorkSet>
</WorkSets>
</Import>
Oto kod Używam tworzyć wyżej:
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();
Chcesz mieć deklarację przestrzeni nazw wyżej w dokumencie, czy nie chcesz w ogóle zadeklarować przestrzeni nazw? –
@BlaiseDoughan Piszę znaczniki Import i WorkSets ręcznie przez XMLStreamWriter, więc ustawiam również ich atrybuty ręcznie. Używam JAXB do gromadzenia kolekcji instancji WorkSet, która działa dobrze, po prostu nie chcę, aby atrybut xmlns był dołączony do każdego z nich. Nie wstawił on atrybutów xmlns do WorkSet, gdy użyłem JAXB do zebrania razem całej instancji XML (Import, Worksets, WorkSet, Work ..). Zaczęło się dopiero, gdy przełączałem JAXB_FRAGMENT na marszałek tylko WorkSet. – TyC
@BlaiseDoughan Przeglądałem interfejs API JAXB i nadal nie widzę, co powoduje umieszczenie przestrzeni nazw w elemencie WorkSet. – TyC