web-dev-qa-db-ja.com

サイトからXMLファイルをダウンロードして解析する際にRetrofitとSimpleXMLを一緒に使用する方法は?

私はレトロフィットを使い始めました。 SimpleXMLを使用するプロジェクトに取り組んでいます。誰かがサイトからXMLを取得する例を私に提供できますか。 http://www.w3schools.com/xml/simple.xml "と読み上げますか?

19
greenspand

プロジェクトの新しいクラスとしてインターフェースを作成します。

public interface ApiService {
    @GET("/xml/simple.xml")
    YourObject getUser();
}

次に、アクティビティで以下を呼び出します。

RestAdapter restAdapter = new RestAdapter.Builder()
                    .setEndpoint("http://www.w3schools.com")
                    .setConverter(new SimpleXmlConverter())
                    .build();

ApiService apiService = restAdapter.create(ApiService.class);
YourObject object = apiService.getXML();

ライブラリを正しく取得するには、build.gradleファイルで以下を実行する必要があります。

configurations {
    compile.exclude group: 'stax'
    compile.exclude group: 'xpp3'
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.squareup.retrofit:retrofit:1.6.1'
    compile 'com.mobprofs:retrofit-simplexmlconverter:1.1'
    compile 'org.simpleframework:simple-xml:2.7.1'
    compile 'com.google.code.gson:gson:2.2.4'
}

次に、YourObjectを指定し、xmlファイルの構造に従って注釈を追加する必要があります

@Root(name = "breakfast_menu")
public class BreakFastMenu {
    @ElementList(inline = true)
    List<Food> foodList;
}

@Root(name="food")
public class Food {
    @Element(name = "name")
    String name;

    @Element(name = "price")
    String price;

    @Element(name = "description")
    String description;

    @Element(name = "calories")
    String calories;
}
50
vandus
import Java.util.ArrayList;
import Java.util.List;

import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;

@Root(name = "breakfast_menu")
public class BrakfastMenu
  {
    @ElementList(inline = true)
    protected List<Food> food;

    public List<Food> getConfigurations()
      {
        if (food == null)
          {
            food = new ArrayList<Food>();
          }
        return this.food;
      }

    public void setConfigurations(List<Food> configuration)
      {
        this.food = configuration;
      }

  }
2
greenspand

Retrofit 2でこれを行う方法は次のとおりです。

まず、次のようなインターフェースが必要です(ヘッダー注釈はオプションです)。

public interface ApiService
{

    @GET("xml/simple.xml")
    @Headers({"Accept: application/xml",
            "User-Agent: Retrofit-Sample-App"})
    Call<BreakfastMenu> getBreakfastMenu();

}

XMLの注釈付きPOJOは、他の回答と同じです。

次に、サーバーにリクエストを送信する必要があります。

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://www.w3schools.com/")
            .addConverterFactory(SimpleXmlConverterFactory.create())
            .build();

    ApiService apiService = retrofit.create(ApiService.class);
    Call<BreakfastMenu> call = apiService.getBreakfastMenu();
    Response<BreakfastMenu> response = call.execute();
    // response.code() == 200
    BreakfastMenu breakfastMenu = response.body();

必要なライブラリは次のとおりです。

  • レトロフィット2.3.0
  • okhttp 3.8.0
  • converter-simplexml 2.3.0
  • simple-xml 2.7.1
  • Java 7

利用可能なソース 私のGitHubで

1
Guillaume Husta