使用XStream解析嵌套标记

时间:2012-08-15 06:23:19

标签: java xml xstream

我正在使用名为Socrata的数据库API来解析回收服务的信息。可以在此处找到此服务的XML输出示例:

http://www.datakc.org/api/views/zqwi-c5q3/rows.xml?search=%22computer%22

正如您可能知道的那样,这看起来就像 bad XML 。我遇到的问题是包含行列表的标记称为row(没有属性),每行也称为row(带属性)。这似乎会混淆XStream的地狱,我找不到用XStream处理这些数据的方法。

你们中的任何一位XStream / XML专家知道我能做什么吗?

2 个答案:

答案 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能够更好地使用的东西,行/元素命名是可以克服的。