XStream: Как мне сопоставить смешанные атрибуты и элементы xml с POJO? - PullRequest
4 голосов
/ 24 февраля 2010

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

Хорошо, у меня есть следующая строка xml

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

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

class Cat {
  int age;
  String name;
}

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

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

Ответы [ 3 ]

3 голосов
/ 24 февраля 2010

Аннотируйте свой класс следующим образом (подробнее см. 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));
0 голосов
/ 24 февраля 2010

Собственно, на сайте 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;
    }

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

НТН

РЕДАКТИРОВАТЬ: Просто хотел добавить, что вы хотите пройти весь этот учебник, а не просто искать этот блок кода. Вам нужно будет создать свой собственный конвертер и зарегистрировать его в своем экземпляре XStream. (Вероятно, очевидно, но на всякий случай ...)

0 голосов
/ 24 февраля 2010

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

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

...