Java 使用XStream解析嵌套标记

Java 使用XStream解析嵌套标记,java,xml,xstream,Java,Xml,Xstream,我正在使用一个名为Socrata的数据库API来解析回收服务的信息。此服务的XML输出示例如下所示: 正如您可能知道的,这看起来就像糟糕的XML。我遇到的问题是,包含行列表的标记被称为row(不带属性),而每一行也被称为row(带属性)。这似乎会把XStream搞糊涂,我根本找不到用XStream处理这些数据的方法 各位XStream/XML专家都知道我能做什么吗?这与其说是一个解决方案,不如说是一个解决方案,但行/元素命名可以通过使用XSLT将DOM重写为XStream能够更好地使用的内容来

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

正如您可能知道的,这看起来就像糟糕的XML。我遇到的问题是,包含行列表的标记被称为
row
(不带属性),而每一行也被称为
row
(带属性)。这似乎会把XStream搞糊涂,我根本找不到用XStream处理这些数据的方法


各位XStream/XML专家都知道我能做什么吗?

这与其说是一个解决方案,不如说是一个解决方案,但行/元素命名可以通过使用XSLT将DOM重写为XStream能够更好地使用的内容来克服。

这个解决方案不是很直观,但我设法找到了答案。首先,我必须声明一个表示响应标记的类。此类还包含回收服务列表的容器。下面是班级的样子:

@XStreamAlias("response")
public class QueryResponse {

    @XStreamAlias("row")
    private RecycleServices services;

    public RecycleServices getServices() {
        return services;
    }

    public void setServices(RecycleServices services) {
        this.services = services;
    }

}
RecycleService类是这里真正的技巧,它包装了一个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;
    }

}
@XStreamAlias(“行”)
公共类回收服务{
@XStreamImplicit(itemFieldName=“行”)
private List services=new ArrayList();
公共列表服务(){
返回服务;
}
公共无效设置服务(列表服务){
这是服务=服务;
}
}

RecycleService类当时只是每个RecycleService行的直接表示,与这个问题的答案并不相关。我在理解这一点时遇到了一些挫折,我希望这对其他人有所帮助。

感谢您的建议,但我担心解析器的选择与此无关。它涉及到XStream如何处理它读取的数据,这似乎有点笨重和复杂,尤其是当API稍有变化时。我有理由怀疑XStream可以通过一些配置技巧来解决这个问题。当然,这只是一个想法,我想更多的是一种解决方法!很好地解决了这个问题。在我发布它后的7个小时内,我都无法做到,所以我等到第二天(今天)才接受它。