【问题标题】:Parsing nested tags with XStream使用 XStream 解析嵌套标签
【发布时间】:2012-08-15 06:23:18
【问题描述】:

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

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

您可能会说,这看起来就像糟糕的 XML。我遇到的问题是包含行列表的标签称为row(没有属性),每行也称为row(有属性)。这似乎会把 XStream 搞得一团糟,我根本找不到用 XStream 处理这些数据的方法。

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

【问题讨论】:

  • 感谢您的建议,但恐怕解析器的选择与此无关。它涉及 XStream 如何处理它读取的数据。

标签: java xml xstream


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

【讨论】:

  • 发完7个小时都发不出去,所以等到第二天(今天)才接受。
【解决方案2】:

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

【讨论】:

  • 这似乎有点笨重和复杂,尤其是在 API 发生轻微变化的情况下。我有理由怀疑 XStream 可以通过一些配置技巧来解决这个问题。
  • 当然,只是一个想法,我想更多的是一种解决方法!搞清楚了,做得很好。
猜你喜欢
  • 1970-01-01
  • 2015-02-09
  • 2013-11-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多