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