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://www.w3schools.com/xml/simple.xml" and reads it out?
Asked
Active
Viewed 2.3k times
3 Answers
52
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;
}
-
In this case is my Object the first Node of the Elements Tree, e.g. – greenspand Aug 19 '14 at 13:38
-
Yes, I am going to provide you with an example of this structure – vandus Aug 19 '14 at 13:38
-
Aham awesome. I did the structure based on the xml example. It starts with this Model: – greenspand Aug 19 '14 at 13:39
-
1I know that this is a late reply, but I'm trying to understand what does "inLine = true" do? – Red M Jul 21 '16 at 02:30
-
In case you're looking for a more detailed example: https://futurestud.io/tutorials/retrofit-how-to-integrate-xml-converter – Farshad Mar 29 '17 at 15:19
-
hi, can you help me to do the same with Retrofit 2 , instead of using "RestAdapter" (but using Retrofit - > . Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_BASE_URL) .client(new OkHttpClient()) .addConverterFactory(SimpleXmlConverterFactory.create()) .build();) – charitha amarasinghe Jul 14 '17 at 05:21
-
@vandus What is getXML()?! – Dr.jacky Aug 01 '17 at 06:40
-
1what about Kotlin? – Pavlos Jun 14 '18 at 15:01
2
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;
}
}

greenspand
- 749
- 2
- 8
- 15
-
Yep. I have updated my answer with the structure for you. You can also make it simpler, but it is up to you, what you want to do with it. – vandus Aug 19 '14 at 13:51
1
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

Guillaume Husta
- 4,049
- 33
- 40