Java - 使用SimpleXML获取ElementList属性(Android / Retrofit)

时间:2015-06-14 16:56:55

标签: java android simple-framework

我正在尝试使用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对象,并从中获取属性。

任何帮助都会非常感激,我不知道如何使它工作,它似乎应该如此简单,但我显然错过了一些东西。

1 个答案:

答案 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;

    }