使用Simple XML进行XML反序列化错误

时间:2013-09-02 15:01:23

标签: java android xml android-xml

在我的一个应用程序中,我使用gamesdb.net的API来下载某些游戏的封面图像。要从XML文件中获取信息,我正在尝试实现Simple XML库来反序列化。

这是我的示例查询结果(name = Splatterhouse,platform = TurboGrafx 16):

<?xml version="1.0" encoding="UTF-8" ?>
<Data>
    <Game>
        <id>3776</id>
        <GameTitle>Splatterhouse</GameTitle>
        <ReleaseDate>01/01/1990</ReleaseDate>
        <Platform>TurboGrafx 16</Platform>
    </Game>
</Data>

这就是我在java中实现我的类的方法:

@Root
public class Data{
    @ElementList(inline=true)
    private List<Game> list; //This is correct, it's only in the example that I've only one result.
    public List<Game> getGames(){
        return list;
    }
}
@Root
public class Game{
    @Element
    private int id;
    @Element
    private String GameTitle;
    @Element(required=false)
    private String ReleaseDate;
    @Element(required=false)
    private String Platform;
    public String getTitle(){
        return GameTitle;
    }
    public int getId(){
        return id;
    }
}

要从xml文件中读取,我调用序列化程序:

String xml = getXmlFromUrl(URL);
Serializer serializer = new Persister();
Data data = serializer.read(Data.class, xml);

怎么了?

更新:简单网站上的教程有点不完整,因为它们没有正确设置注释,这些注释解决了我的所有问题,而且所有警告都是“正常”,这很简单,说明jaxp在Android上不存在,并且会使用其他工具(XmlPullParser?)。

这是我正确的代码:

@Root(name = "Data")
public class Data {
    @ElementList(inline = true, required = false)
    private List<Game> list = new ArrayList<Game>();

    public List<Game> getGames() {
        return list;
    }
}

@Root(name = "Game", strict = false)
public class Game {
    @Element(name = "id")
    private int id;
    @Element(name = "GameTitle")
    private String GameTitle;

    public String getTitle() {
        return GameTitle;
    }

    public int getId() {
        return id;
    }
}

4 个答案:

答案 0 :(得分:1)

您还可以使用JAXB来(de)序列化XML(或者在他们调用时将其编组为(un)marshal)。它带有java - 因此不需要额外的库。这里有example

答案 1 :(得分:1)

我认为您需要在自己的文件(数据和游戏)中声明您的类,或将它们标记为static。如果将它们声明为内部类,则它们不能由库构造,因为它们只能存在于父类的实例中。

答案 2 :(得分:0)

这与您的XML无关,您使用的库似乎有问题(无法创建某个类的新实例)。请考虑重新下载并再次将其添加到项目中。

答案 3 :(得分:0)

SimpleXML网站上的教程显示了注释的不完整和不准确的使用。 我更新了我的代码,检查我的答案底部以获得正确的实现。我们严格建议您在注释中使用name="Name",如果您不需要Elements / Attributes在课程中使用strict=false,则必须使用= false你的元素或属性。