Я использую XStream и есть класс с полем, как следующее:XStream настраиваемый конвертер, который может генерировать плоскую структуру XML из списка?
private Map<String, String> data;
Я хочу, чтобы сгенерировать вывод XML так:
<key1>test data</key1>
<key2>test data</key2>
<key3>test data</key3>
Так что я хочу ключ карты, чтобы быть элемент. Значение map должно быть значением XML, и я не хочу, чтобы XML, обернутый в элемент, такой как <data></data>
. Может ли кто-нибудь указать пример кода, который делает это, или что-то подобное?
UPDATE
Это только отрывок, есть корневой элемент.
UPDATE 2
Обычай конвертер код, который я разместил ниже почти работает. Я получаю плоскую структуру, но мне нужно удалить внешний элемент. Есть идеи по этому поводу?
//this is the result need to remove <data>
<data>
<key1>test data</key1>
<key2>test data</key2>
<key3>test data</key3>
</data>
Это код
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 не должен иметь несколько элементов корня. – dummy
это всего лишь фрагмент. Существует корневой элемент. Я просто хочу, чтобы элементы списка выглядели плоскими. –
Что такое с близкими голосами? Это похоже на вопрос, для которого SO был создан. –