java - 使用 SimpleXML 反序列化

标签 java xml xml-deserialization simple-framework

编辑:删除了之前的编辑

我正在尝试反序列化以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<ALL>
    <KAMP>
        <ID>1</ID>
        <SQLTID>1376881200</SQLTID>
        <DATO>2013-08-19</DATO>
    </KAMP>
    ...
    <KAMP>
        <ID>2</ID>
        <SQLTID>1376881200</SQLTID>
        <DATO>2013-08-19</DATO>
    </KAMP>
</ALL>

使用

@Root
public class Matches {

    @ElementList
    private List<Match> list;

    public List getMatches() {
        return list;
    }
}

@Root(name = "KAMP", strict = false)
public class Match{

    @Element(name = "ID", required = false)
    public String Id;

    @Element(name = "SQLTID", required = false)
    public String Sqltid;

    @Element(name = "DATO", required = false)
    public String MatchDate;
}

我一直在努力

Element 'KAMP' does not have a match in class <myClass>

我试过将 (name = "KAMP") 添加到 @ElementList 但它没有帮助。

还有其他人可以帮忙吗?

最佳答案

以下代码对我有用,特别注意以下两项:

  1. ALL.java 中的空构造函数
  2. List 有注释 inline=true

ALL.java:

import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;
import java.io.File;
import java.util.List;

/**
 * User: alfasin
 * Date: 8/19/13
 */
@Root(name="ALL")
public class ALL {

    @ElementList(entry="KAMP", inline=true)
    private List<KAMP> kamp;

    public ALL(){};

    public List<KAMP>  getMatches() {
        return kamp;
    }

    public static void main(String...args) throws Exception {
        Serializer serializer = new Persister();
        File example = new File("/Users/alfasin/Documents/workspace-sts-3.2.0.RELEASE/SimpleXML/src/kamp.xml");
        ALL all = serializer.read(ALL.class, example);
        for(KAMP tmp : all.getMatches()){
            System.out.println("ID: "+tmp.Id);
            System.out.println("MatchDate: "+tmp.MatchDate);
            System.out.println("Sqltid: "+tmp.Sqltid);
            System.out.println("----------");
        }
    }
}

KAMP.java

import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

/**
 * User: alfasin
 * Date: 8/19/13
 */
@Root(name="KAMP",strict = false)
public class KAMP {

    @Element(name = "ID", required = false)
    public String Id;

    @Element(name = "SQLTID", required = false)
    public String Sqltid;

    @Element(name = "DATO", required = false)
    public String MatchDate;

}

输出

ID: 1
MatchDate: 2013-08-19
Sqltid: 1376881200
----------
ID: 2
MatchDate: 2013-08-19
Sqltid: 1376881200
----------

关于java - 使用 SimpleXML 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18317273/

相关文章:

c# - 如何将xml反序列化为对象

java - sleep VS AlarmManager.set AND AlarmManager.setRepeating VS Handler

java - 三元组的最大值和最小值

java - 如何在不创建另一个类的情况下创建内部 child ?

android - 在两个元素之间添加一个 listView

VB/VBA 中的 XML 反序列化

c# - "Unknown Node:VarName"XML 反序列化期间

java - ListView 上的弹出上下文菜单保持

java - SwingLabs (SwingX) 收购后的状态是什么

android - 表格布局间距问题