Ich bin mit XStream und habe eine Klasse mit einem Feld wie folgt aus:XStream-benutzerdefinierter Konverter, der eine flache XML-Struktur aus List generieren kann?
private Map<String, String> data;
Ich möchte XML Ausgabe wie folgt generieren:
<key1>test data</key1>
<key2>test data</key2>
<key3>test data</key3>
Deshalb möchte ich die Mapkey die sein Element. Der mapvalue soll der XML-Wert sein und ich möchte nicht, dass die XML in ein Element wie <data></data>
eingepackt wird. Kann jemand auf Beispielcode zeigen, der dies oder etwas ähnliches tut?
UPDATE
Dies nur ein Ausschnitt, gibt es ein Stammelement.
UPDATE 2
Der Code benutzerdefinierte Konverter I unten geschrieben fast funktioniert. Ich bekomme eine flache Struktur, aber ich muss das äußere Element entfernen. Irgendeine Idee dazu?
//this is the result need to remove <data>
<data>
<key1>test data</key1>
<key2>test data</key2>
<key3>test data</key3>
</data>
Dies ist der Code
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;
}
}
Valid XML müssen nicht mehrere Stammelemente aufweisen. – dummy
Dies ist nur ein Ausschnitt. Es gibt ein Wurzelelement. Ich möchte nur, dass die Listenelemente flach erscheinen. –
Was ist mit den Schlussabstimmungen? Dies scheint eine Frage zu sein, für die SO geschaffen wurde. –