How to use Retrofit and SimpleXML together in downloading and parsing an XML file from a site?

前端 未结 3 1853
有刺的猬
有刺的猬 2020-12-02 16:04

I just started working with Retrofit. I am working on a project that uses SimpleXML. Can somebody provide me an example in which one fetches an XML from a site e.g. http://w

相关标签:
3条回答
  • 2020-12-02 16:31
    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;
          }
    
      }
    
    0 讨论(0)
  • 2020-12-02 16:50

    You will create an interface as a new class in your project:

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

    Then in your activity you will call the following:

    RestAdapter restAdapter = new RestAdapter.Builder()
                        .setEndpoint("http://www.w3schools.com")
                        .setConverter(new SimpleXmlConverter())
                        .build();
    
    ApiService apiService = restAdapter.create(ApiService.class);
    YourObject object = apiService.getXML();
    

    To get your libraries correctly, in your build.gradle file you need to do the following:

    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'
    }
    

    Then you need to specify YourObject and add annotations to it according to the structure of the xml file

    @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;
    }
    
    0 讨论(0)
  • 2020-12-02 16:50

    Here's how to do it with Retrofit 2.

    First you need an interface like (headers annotations are optional) :

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

    The annotated POJOs for XML are the same as in the other answers.

    Then you need to make a request to the server :

        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();
    

    The needed libraries are :

    • retrofit 2.3.0
    • okhttp 3.8.0
    • converter-simplexml 2.3.0
    • simple-xml 2.7.1
    • Java 7

    Source available on my GitHub

    0 讨论(0)
提交回复
热议问题