我正在尝试使用SimpleXML解析看起来像这样的XML响应。它与简单的xml教程页面中显示的示例非常相似
http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#javabean
<response>
<version>1.0</version>
<code>1</code>
<message>Report generated</message>
<records total="365">
<record rowId="1" data1="1234" data2="abc" />
<record rowId="2" data1="5678" data2="def" />
<record rowId="3" data1="9012" data2="ghi" />
</records>
</response>
我唯一的区别是,我的<records total="365">
标签有一个我需要收集的属性,所以我可以确定是否有多页结果。
我尝试过使用他们的例子,这导致了这个
public class Response {
private ArrayList<Record> records;
@Element
public String message;
@Element
public String code;
@Element
public String version;
@ElementList
public void setRecords(ArrayList<Record> records) {
if(records.isEmpty()) {
throw new IllegalArgumentException("Empty collection");
}
this.records = records;
}
@ElementList
public ArrayList<Record> getRecords() {
return records;
}
public class Record {
@Attribute public String data1;
@Attribute public String data2;
}
}
除了缺少Records标记中的Total属性外,这也能正常工作。
无论我尝试做什么来获得这个Total标签都不行。
我已经尝试了各种组合来创建一个包含属性和ArrayList的Records类,将它作为基本属性放在主对象中,或者尝试在主响应对象中使用getter / setter而不进行任何操作运气。
E.G。
public class Response {
@Element
public String message;
@Element
public String code;
@Element
public String version;
@Element
public Records records;
public class Records{
private ArrayList<Record> records;
@Attribute
public String total;
@ElementList
public void setRecords(ArrayList<Record> records) {
if(records.isEmpty()) {
throw new IllegalArgumentException("Empty collection");
}
this.records = records;
}
@ElementList
public ArrayList<Record> getRecords() {
return records;
}
}
public class Record {
@Attribute public String data1;
@Attribute public String data2;
}
}
我不明白如何制作List对象,并从中获取属性。
任何帮助都会非常感激,我不知道如何使它工作,它似乎应该如此简单,但我显然错过了一些东西。
答案 0 :(得分:1)
能够得到一些帮助,这是有效的
@Default(DefaultType.FIELD)
public class Response{
public String message;
public String code;
public String version;
public Records records;
public Records getRecords ()
{
return records;
}
public void setRecords (ArrayList<Record> records)
{
this.records.setRecord(records);
}
}
public class Records
{
@Attribute
public String total;
public ArrayList<Record> records;
public String getTotal ()
{
return total;
}
public void setTotal (String total)
{
this.total = total;
}
@ElementList(inline=true)
public ArrayList<Record> getRecord ()
{
return records;
}
@ElementList(inline=true)
public void setRecord (ArrayList<Record> record)
{
this.records = record;
}
}
public class Record {
@Attribute public String data1;
@Attribute public String data2;
}