Java - 使用 SimpleXML 获取 ElementList 属性 (Android/Retrofit)
Java - Getting a ElementList attribute with SimpleXML (Android/Retrofit)
我正在尝试使用 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 标记移出,但均无济于事。
我已经尝试了各种组合,包括创建一个包含属性的 Records class 和 ArrayList,将其作为基本属性放在主对象中,或者尝试使用 getter / setter 在主要响应对象中没有任何运气。
例如
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 对象,并从中获取属性。
任何帮助将不胜感激,我不确定如何让它工作,看起来应该如此简单,但我显然遗漏了一些东西。
能够得到一些帮助,这就是有效的方法
@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;
}
我正在尝试使用 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 标记移出,但均无济于事。
我已经尝试了各种组合,包括创建一个包含属性的 Records class 和 ArrayList,将其作为基本属性放在主对象中,或者尝试使用 getter / setter 在主要响应对象中没有任何运气。
例如
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 对象,并从中获取属性。
任何帮助将不胜感激,我不确定如何让它工作,看起来应该如此简单,但我显然遗漏了一些东西。
能够得到一些帮助,这就是有效的方法
@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;
}