【发布时间】:2015-06-02 06:42:30
【问题描述】:
我正在使用 XStream 库将 XML 解析为对象。我的问题是 XML 模式(诚然它不是很好,但它也是我无法控制的)指定某个元素在其属性中具有其所有数据,如下所示:
<Player machineIdentifier="41412kj423nkj234" platform="Chrome" product="Plex Web" state="playing" title="Plex Web (Chrome)" />
Player 元素的我的班级:
@XStreamAlias("Player")
public class Player {
@XStreamAlias("platform")
@XStreamAsAttribute
private String platform;
@XStreamAlias("product")
@XStreamAsAttribute
private String product;
@XStreamAlias("title")
@XStreamAsAttribute
private String name;
// Getters-setters ommited for brevity
}
由于该元素在技术上是空的,XStream.fromXML() 会生成一个 Player 字段为空的对象。
如何让 XStream 仍然解析和实例化 Player 对象,以便我可以使用属性?
编辑 Aniket 的答案
我正在使用processAnnotations() 方法。由于实际的模式不仅仅是一个Player 元素,因此如果不处理注释,它甚至无法工作。
我的“objectifier”类(因为我正在使用多个模式,所以我做了更通用的):
public class XMLObjectifier {
// Other models omitted for brevity
private Class[] sessionModel = new Class[]{
PlexSessionResponse.class,
Player.class,
User.class,
Video.class
};
public Object toObject(String xml, ModelType type) {
XStream xStream = new XStream();
xStream.ignoreUnknownElements();
switch (type) {
case STATUS:
xStream.processAnnotations(statusModel);
break;
case SESSION:
xStream.processAnnotations(sessionModel);
break;
}
return xStream.fromXML(xml);
}
}
【问题讨论】:
标签: java xml xml-parsing xstream