这一定是一个新手问题,但我无法从http://x-stream.github.io/得到它。
好吧,我有以下 xml 字符串
<cat age="4" >
<name>Garfield</name>
</cat>
需要映射到:
class Cat {
int age;
String name;
}
有没有一种使用 XStream 的简单方法来做到这一点?如果没有,我还能尝试什么?
提前致谢。
这一定是一个新手问题,但我无法从http://x-stream.github.io/得到它。
好吧,我有以下 xml 字符串
<cat age="4" >
<name>Garfield</name>
</cat>
需要映射到:
class Cat {
int age;
String name;
}
有没有一种使用 XStream 的简单方法来做到这一点?如果没有,我还能尝试什么?
提前致谢。
像这样注释您的类(有关详细信息,请查看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));
实际上,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 实例中。(可能很明显,但以防万一......)
您可以使用 XPath。
它在现代 JVM 上的速度非常快,而且是一种可转移的技能。例如,您可以在 .NET 等上使用 XPath