In this example we will learn how to parse xml in android.
For better understanding taking a simple and static xml to parse.

//Static XML data which we will parse
final String XMLData = "
<?xml version="1.0"?>
<login>
<status>OK</status>
<jobs>
<job>
<id>4</id>
<companyid>4</companyid>
<company>Android Example</company>
<address>Parse XML Android</address>
<city>Tokio</city>
<state>Xml Parsing Tutorial</state>
<zipcode>601301</zipcode>
<country>Japan</country>
<telephone>9287893558</telephone>
<fax>1234567890</fax>
<date>2012-03-15 12:00:00</date>
</job>
<job>
<id>5</id>
<companyid>6</companyid>
<company>Xml Parsing In Java</company>
<address>B-22</address>
<city>Cantabill</city>
<state>XML Parsing Basics</state>
<zipcode>201301</zipcode>
<country>America</country>
<telephone>9287893558</telephone>
<fax>1234567890</fax>
<date>2012-05-18 13:00:00</date>
</job>
</jobs>
</login>
";
XmlValuesModel.java
public class XmlValuesModel {
private int id;
private int companyid;
private String company = "";
private String date = "";
private String address="";
private String city="";
private String state="";
private String zipcode="";
private String country="";
private String telephone="";
private String forms="";
/************* Define Setter Methods *********/
public void setid(int id)
{
this.id = id;
}
public void setcompanyid(int companyid)
{
this.companyid = companyid;
}
public void setcompany(String company)
{
this.company = company;
}
public void setaddress(String address)
{
this.address = address;
}
public void setcity(String city)
{
this.city = city;
}
public void setstate(String state)
{
this.state = state;
}
public void setzipcode(String zipcode)
{
this.zipcode = zipcode;
}
public void setcountry(String country)
{
this.country = country;
}
public void settelephone(String telephone)
{
this.telephone = telephone;
}
public void setdate(String date)
{
this.date = date;
}
/************* Define Getter Methods *********/
public int getid()
{
return id;
}
public String getdate()
{
return date;
}
public int getcompanyid()
{
return companyid;
}
public String getcompany()
{
return company;
}
public String getaddress()
{
return this.address;
}
public String getcity()
{
return this.city;
}
public String getstate()
{
return this.state;
}
public String getzipcode()
{
return this.zipcode;
}
public String getcountry()
{
return this.country;
}
public String gettelephone()
{
return this.telephone;
}
public void setforms(String forms)
{
this.forms = forms;
}
public String getforms()
{
return this.forms;
}
}
=============================================================================================
XMLParser.java
Parser class to parse each xml node.
// SAX parser to parse job
public class XMLParser extends DefaultHandler
{
List<XmlValuesModel> list=null;
// string builder acts as a buffer
StringBuilder builder;
XmlValuesModel jobsValues=null;
// Initialize the arraylist
// @throws SAXException
@Override
public void startDocument() throws SAXException {
/******* Create ArrayList To Store XmlValuesModel object ******/
list = new ArrayList<XmlValuesModel>();
}
// Initialize the temp XmlValuesModel object which will hold the parsed info
// and the string builder that will store the read characters
// @param uri
// @param localName ( Parsed Node name will come in localName )
// @param qName
// @param attributes
// @throws SAXException
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
/**** When New XML Node initiating to parse this function called *****/
// Create StringBuilder object to store xml node value
builder=new StringBuilder();
if(localName.equals("login")){
//Log.i("parse","====login=====");
}
else if(localName.equals("status")){
// Log.i("parse","====status=====");
}
else if(localName.equals("jobs")){
}
else if(localName.equals("job")){
// Log.i("parse","----Job start----");
/********** Create Model Object *********/
jobsValues = new XmlValuesModel();
}
}
// Finished reading the login tag, add it to arraylist
// @param uri
// @param localName
// @param qName
// @throws SAXException
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if(localName.equals("job")){
/** finished reading a job xml node, add it to the arraylist **/
list.add( jobsValues );
}
else if(localName.equalsIgnoreCase("status")){
}
else if(localName.equalsIgnoreCase("id")){
jobsValues.setid(Integer.parseInt(builder.toString()));
}
else if(localName.equalsIgnoreCase("companyid")){
jobsValues.setcompanyid(Integer.parseInt(builder.toString()));
}
else if(localName.equalsIgnoreCase("company")){
jobsValues.setcompany(builder.toString());
}
else if(localName.equalsIgnoreCase("address")){
jobsValues.setaddress(builder.toString());
}
else if(localName.equalsIgnoreCase("city")){
jobsValues.setcity(builder.toString());
}
else if(localName.equalsIgnoreCase("state")){
jobsValues.setstate(builder.toString());
}
else if(localName.equalsIgnoreCase("zipcode")){
jobsValues.setzipcode(builder.toString());
}
else if(localName.equalsIgnoreCase("country")){
jobsValues.setcountry(builder.toString());
}
else if(localName.equalsIgnoreCase("telephone")){
jobsValues.settelephone(builder.toString());
}
else if(localName.equalsIgnoreCase("date")){
jobsValues.setdate(builder.toString());
}
// Log.i("parse",localName.toString()+"========="+builder.toString());
}
// Read the value of each xml NODE
// @param ch
// @param start
// @param length
// @throws SAXException
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
/****** Read the characters and append them to the buffer ******/
String tempString=new String(ch, start, length);
builder.append(tempString);
}
}
Explanation :
startDocument() Method :
This function called in very parse begin. so create Arraylist type Model Objest . we will store each Model object in this ArrayList.
startElement() Method :
Called when new XML node starting to parse.
See In Defined XML Node name job is contained data , thatswhy we are checking for job node and then create new Model inside that check.
else if(localName.equals("job")){
//Log.i("parse","----Job start----");
/********** Create Model Object *********/
jobsValues = new XmlValuesModel();
}
endElement() Method :
This function will call for each node when parsing reached to close of the node.
See In Defined XML Node name job contained other node values , so parse Other node values inside job node and store parsed values in Model Object, then check for job node end and store Model object to ArrayList ( Previously Defined ).
if(localName.equals("job")){
/************* finished reading a job node, add Model Object it to arraylist ********/
list.add(jobsValues);
}
===================================================================================================
ParseXmlAndroidExample.java
This is the main activity class. For this class i have comment explanation.
public class ParseXmlAndroidExample extends Activity {
List<XmlValuesModel> myData = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_parse_xml_android_example);
final TextView output = (TextView) findViewById(R.id.output);
final Button bparsexml = (Button) findViewById(R.id.bparsexml);
//Static XML data which we will parse
final String XMLData = "
<?xml version="1.0"?>
<login>
<status>OK</status>
<jobs>
<job>
<id>4</id>
<companyid>4</companyid>
<company>Android Example</company>
<address>Parse XML Android</address>
<city>Tokio</city>
<state>Xml Parsing Tutorial</state>
<zipcode>601301</zipcode>
<country>Japan</country>
<telephone>9287893558</telephone>
<fax>1234567890</fax>
<date>2012-03-15 12:00:00</date>
</job>
<job>
<id>5</id>
<companyid>6</companyid>
<company>Xml Parsing In Java</company>
<address>B-22</address>
<city>Cantabill</city>
<state>XML Parsing Basics</state>
<zipcode>201301</zipcode>
<country>America</country>
<telephone>9287893558</telephone>
<fax>1234567890</fax>
<date>2012-05-18 13:00:00</date>
</job>
</jobs>
</login>
";
String dataToBeParsed = "Click on button to parse XML.\n\n XML DATA : \n\n"+XMLData;
output.setText(dataToBeParsed);
/**** Button Click Listener ********/
bparsexml.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
try{
/************** Read XML *************/
BufferedReader br=new BufferedReader(new StringReader(XMLData));
InputSource is=new InputSource(br);
/************ Parse XML **************/
XMLParser parser=new XMLParser();
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser sp=factory.newSAXParser();
XMLReader reader=sp.getXMLReader();
reader.setContentHandler(parser);
reader.parse(is);
/************* Get Parse data in a ArrayList **********/
myData=parser.list;
if(myData!=null){
String OutputData = "";
/*************** Get Data From ArrayList *********/
for (XmlValuesModel xmlRowData : myData) {
if(xmlRowData!=null)
{
int id = xmlRowData.getid();
int companyid = xmlRowData.getcompanyid();
String company = xmlRowData.getcompany();
String address = xmlRowData.getaddress();
String city = xmlRowData.getcity();
String state = xmlRowData.getstate();
String zipcode = xmlRowData.getzipcode();
String country = xmlRowData.getcountry();
String telephone = xmlRowData.gettelephone();
String date = xmlRowData.getdate();
OutputData += "Job Node : \n\n "+ company +" | "
+ address +" | "
+ city +" | "
+ state +" | "
+ zipcode +" | "
+ country +" | "
+ telephone +" | "
+ date +" \n\n "
;
}
else
Log.e("Jobs", "Jobs value null");
}
/******** Show Data *************/
output.setText(OutputData);
}
}
catch(Exception e){Log.e("Jobs", "Exception parse xml :"+e);}
}
});
}
}
===================================================================================================
activity_parse_xml_android_example.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ParseXmlAndroidExample" >
<Button
android:id="@+id/bparsexml"
android:text="Parse Xml Android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
<TextView
android:id="@+id/output"
android:paddingTop="10px"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="" />
</LinearLayout>