0

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

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

正如您可能知道的那样,这看起来就像糟糕的 XML。我遇到的问题是包含行列表的标签被调用row(没有属性)并且每一行也被调用row(有属性)。这似乎会让 XStream 搞得一团糟,我根本找不到用 XStream 处理这些数据的方法。

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

4

2 回答 2

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 类只是每个回收服务行的直接表示,与这个问题的答案并不真正相关。我对此感到有些沮丧,我希望这可以帮助那里的人。

于 2012-08-16T22:46:44.340 回答
0

这更像是一种解决方法而不是解决方案,但是通过使用 XSLT 将 DOM 重写为 XStream 能够更好地使用的东西,可以克服行/元素命名。

于 2012-08-15T10:05:41.900 回答