2010-02-23 2 views
4

Это должен быть вопрос новичков, но я не мог получить его от http://x-stream.github.io/.XStream: Как сопоставить xml смешанные атрибуты и элементы с POJO?

Ну, у меня есть следующий XML-строка

<cat age="4" > 
    <name>Garfield</name> 
</cat> 

, который должен быть сопоставлен:

class Cat { 
    int age; 
    String name; 
} 

Есть ли простой способ сделать это с помощью XStream? Если нет, что еще я могу попробовать?

Заранее спасибо.

ответ

-1

Вы можете использовать XPath.

Очень скоро на современных JVM и переносимом умении. Например. Вы можете использовать XPath в .NET и т.д.

0

На самом деле, есть ответ на сайте XStream - в преобразователе учебник;)

От http://x-stream.github.io/converter-tutorial.html:

public Object unmarshal(HierarchicalStreamReader reader, 
        UnmarshallingContext context) { 
      Birthday birthday = new Birthday(); 
      if (reader.getAttribute("gender").charAt(0) == 'm') { 
        birthday.setGenderMale(); 
      } else { 
        birthday.setGenderFemale(); 
      } 
      reader.moveDown(); 
      Person person = (Person)context.convertAnother(birthday, Person.class); 
      birthday.setPerson(person); 
      reader.moveUp(); 
      reader.moveDown(); 
      Calendar date = (Calendar)context.convertAnother(birthday, Calendar.class); 
      birthday.setDate(date); 
      reader.moveUp(); 
      return birthday; 
    } 

(Это в самый последний пример/блок кода на странице)

НТН

EDIT:. Просто хотел бы добавить, что вы хотите, чтобы пройти через весь этот учебник, а не дзю st ищет этот блок кода. Вам нужно будет создать свой собственный конвертер и зарегистрировать его с помощью экземпляра XStream. (Вероятно, очевидно, но на всякий случай ...)

3

аннотировать класс как так (проверьте http://x-stream.github.io/annotations-tutorial.html для деталей):

@XStreamAlias("cat") 
class Cat { 
    @XStreamAsAttribute 
    int age; 
    String name; 
} 

Теперь просто использовать XStream следующим образом:

xstream = new XStream(); 
xstream.processAnnotations(Cat.class); 
Cat roundtripGarfield = (Cat)xstream.fromXML(xstream.toXML(garfield)); 
+1

был просто написав то же самое. Добавить ссылку на аннотации docs: http://xstream.codehaus.org/annotations-tutorial.html – daveb

+0

@daveb: спасибо за подсказку –

+0

+1 Это полностью сошло на мой взгляд, что для этого будет аннотация. Должен был thunk ... – MCory

Смежные вопросы