2015-04-27 1 views
0

Существует аннотацию @ElementMap, что позволяет анализировать такие теги к картам:Как анализировать пользовательские теги?

<field key="key">value</field> 

Можно ли разобрать такие виды тегов карты ?:

<key>value</key> 

Я попытался написать собственный конвертер для моего класса, но он по-прежнему не позволяет использовать пользовательские теги пользователя в xml.

ответ

1

Я попытался написать собственный конвертер для своего класса, но он по-прежнему не позволяет использовать пользовательские теги пользователя в xml.

Можете привести более подробную информацию?


Вот пример того, как можно реализовать преобразователь:

@Root 
@Convert(Example.ExampleConverter.class) 
public class Example 
{ 
    private Map<String, String> map; 

    // ... 

    static class ExampleConverter implements Converter<Example> 
    { 
     @Override 
     public Example read(InputNode node) throws Exception 
     { 
      Example value = new Example(); 
      value.map = new HashMap<>(); 

      InputNode childNode = node.getNext(); 

      while(childNode != null) 
      { 
       value.map.put(childNode.getName(), childNode.getValue()); 
       childNode = node.getNext(); 
      } 

      return value; 
     } 

     @Override 
     public void write(OutputNode node, Example value) throws Exception 
     { 
      for(Entry<String, String> entry : value.map.entrySet()) 
      { 
       node.getChild(entry.getKey()).setValue(entry.getValue()); 
      } 
     } 
    } 
} 

Пример использования:

Serializer ser = new Persister(new AnnotationStrategy()); 

final String xml = "<example>\n" 
     + " <key1>value1</key1>\n" 
     + " <key2>value2</key2>\n" 
     + " <key3>value3</key3>\n" 
     + "</example>"; 

Example e = ser.read(Example.class, xml); 
System.out.println(e); 

Выход (зависит от toString() -внедрение:

Example{map={key1=value1, key2=value2, key3=value3}}