Sto utilizzando la proprietà JAXB_FRAGMENT per il marshalling per il marshalling a livello di WorkSet. Il problema è che quando eseguo il marshalling attribuisco l'elemento WorkSet all'attributo xmlns ogni volta. C'è un modo per effettuare il marshalling in modo che non colleghi l'attributo xmlns? Ecco come si presenta il mio XML.JAXB Fragment Marshal senza spazio dei nomi
<Import>
<WorkSets>
<WorkSet xmlns="http://www.namespace.com">
<Work>
<Work>
...
..
...
</WorkSet>
<WorkSet xmlns="http://www.namespace.com">
<Work>
<Work>
...
</WorkSet>
</WorkSets>
</Import>
Ecco il codice che sto utilizzando il creare quanto sopra:
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();
Volete avere la dichiarazione dello spazio dei nomi più in alto nel documento, o non vuoi affatto dichiarare un namespace? –
@BlaiseDoughan Sto scrivendo manualmente i tag Importa e Workset attraverso un XMLStreamWriter, quindi ho impostato manualmente anche i loro attributi. Sto usando JAXB per eseguire il marshalling di una raccolta di istanze WorkSet, che funziona bene, ma non voglio che l'attributo xmlns sia allegato a ciascuno. Non ha inserito gli attributi xmlns su WorkSet quando ho usato JAXB per eseguire il marshalling dell'intera istanza XML insieme (Importa, Workset, Workset, Lavoro ...). È iniziato solo quando ho attivato JAXB_FRAGMENT per eseguire il marshalling di WorkSet. – TyC
@BlaiseDoughan Ho cercato attraverso l'API JAXB e ancora non riesco a vedere cosa sta causando lo spazio dei nomi da mettere sull'elemento WorkSet. – TyC