我正在使用名为Socrata的数据库API来解析回收服务的信息。可以在此处找到此服务的XML输出示例:
http://www.datakc.org/api/views/zqwi-c5q3/rows.xml?search=%22computer%22
正如您可能知道的那样,这看起来就像 bad XML 。我遇到的问题是包含行列表的标记称为row
(没有属性),每行也称为row
(带属性)。这似乎会混淆XStream的地狱,我找不到用XStream处理这些数据的方法。
你们中的任何一位XStream / XML专家知道我能做什么吗?
答案 0 :(得分:1)
解决方案不是很直观,但我设法弄清楚了。首先,我必须声明一个代表响应标记的类。此类还包含一个循环服务列表的容器。以下是该课程的外观:
@XStreamAlias("response")
public class QueryResponse {
@XStreamAlias("row")
private RecycleServices services;
public RecycleServices getServices() {
return services;
}
public void setServices(RecycleServices services) {
this.services = services;
}
}
RecycleServices类是真正的技巧,它包含一个隐式的RecycleService类列表。
@XStreamAlias("row")
public class RecycleServices {
@XStreamImplicit(itemFieldName = "row")
private List<RecycleService> services = new ArrayList<RecycleService>();
public List<RecycleService> getServices() {
return services;
}
public void setServices(List<RecycleService> services) {
this.services = services;
}
}
然后,RecycleService类只是每个回收服务行的直接表示,并且与此问题的答案无关。我有点沮丧地想出这个,我希望这有助于那里的人。
答案 1 :(得分:0)
这更像是一种解决方法而不是解决方案,但是使用XSLT将DOM重写为XStream能够更好地使用的东西,行/元素命名是可以克服的。