Sto usando xstream e avere una classe con un campo simile al seguente:Convertitore XStream personalizzato in grado di generare una struttura XML piatta da Elenco?
private Map<String, String> data;
voglio generare output XML in questo modo:
<key1>test data</key1>
<key2>test data</key2>
<key3>test data</key3>
Quindi voglio la chiave della mappa per essere il elemento. Il valore della mappa deve essere il valore XML e non voglio che l'XML sia racchiuso in un elemento come <data></data>
. Qualcuno può puntare a un codice di esempio che faccia questo o qualcosa di simile?
UPDATE
Questo solo un frammento, è presente un elemento radice.
UPDATE 2
Il codice convertitore personalizzato che ho postato qui sotto funziona quasi. Ottengo una struttura piatta, ma ho bisogno di rimuovere l'elemento esterno. Qualche idea su questo?
//this is the result need to remove <data>
<data>
<key1>test data</key1>
<key2>test data</key2>
<key3>test data</key3>
</data>
Questo è il codice
public class MapToFlatConverter implements Converter{
public MapToFlatConverter() {
}
@Override
public boolean canConvert(Class type) {
return Map.class.isAssignableFrom(type);
}
@Override
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
Map<String, String> map = (Map<String, String>) source;
for (Map.Entry<String, String> entry : map.entrySet()) {
writer.startNode(entry.getKey());
writer.setValue(entry.getValue().toString());
writer.endNode();
}
}
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
//not needed at this time
return null;
}
}
XML valido non deve avere più elementi radice. – dummy
questo è solo uno snippet. C'è un elemento radice. Voglio solo che gli elementi della lista appaiano piatti. –
che cosa è con i voti ravvicinati? Questa sembra una domanda per cui SO è stato creato. –