1

私のアプリケーションの 1 つで、thegamesdb.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);

どうしたの?

更新: Simple Site のチュートリアルは、注釈が適切に設定されていないため少し不完全であることが判明しました。これらの注釈はすべての問題を解決し、すべての警告は「正常」であり、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

4 に答える 4

1

クラスを独自のファイル(データとゲーム)で宣言するか、.としてマークする必要があると思いますstatic。それらを内部クラスとして宣言すると、親クラスのインスタンス内にしか存在できないため、ライブラリによって構築できません。

于 2013-09-02T15:12:21.233 に答える
1

JAXBまた、XML を (逆) シリアル化する (または、呼び出されたときに (非) マーシャリングする)ために使用することもできます。Java が付属しているため、追加のライブラリは必要ありません。ここにがあります。

于 2013-09-02T15:09:13.007 に答える