Generally, XML (Extensible Mark-up Language) is one of the commonly used data exchange format to interchange the data between servers.
In android, we have a three types of XML parsers to parse the XML data to get the required information in android applications, those are
- DOM Parser
- SAX Parser
- XMLPullParser
Now we will see how to use DOM parser in android applications to parse the XML document to get the required informations.
Android DOM Parser
In android, DOM parser will use an object based approach to create and parse the XML files in android applications.
Generally, the DOM parser will load the XML file into memory to parse the XML document, due to that it will consume more memory and it will parse the XML document from starting node to end node.
Basically, the XML file will contain a following 4 main components.
Component | Description |
---|---|
Prolog | Generally, the XML file will start with a prolog. The first line that contains the information about a file is prolog. |
Events | Genrally, the XML file will contain a many events that includes document start and end, tag start and end, etc. |
Text | It's a simple text in xml tag elements. |
Attributes | Attributes are the additional properties of a tag such as value etc. present within the tag. |
Following is the sample structure of XML file with user details in android applications.
<?xml version="1.0" encoding="utf-8"?>
<users>
<user>
<name>Suresh Dasari</name>
<designation>Team Leader</designation>
<loation>Hyderabad</loation>
</user>
<user>
<name>Rohini Alavala</name>
<designation>Agricultural Officer</designation>
<loation>Guntur</loation>
</user>
</users>
If you observe above xml structure it contains a different type of components such as prolog, events, text and attributes.
Android DOM XML Parsing
To read and parse the XML data using DOM parser in android, we need to create an instance of DocumentBuilderFactory, DocumentBuilder and Document objects in android applications.
Following is the code snippet of reading and parsing the XML data using DOM parser in android applications with DocumentBuilderFactory, DocumentBuilder and Document objects to get the required information from XML objects.
InputStream istream = getAssets().open("userdetails.xml");
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = builderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(istream);
NodeList nList = doc.getElementsByTagName("user");for(int i =0;i<nList.getLength();i++){
if(nList.item(0).getNodeType() == Node.ELEMENT_NODE){
HashMap<String,String> user = new HashMap<>();
Element elm = (Element)nList.item(i);
user.put("name", getNodeValue("name",elm));
user.put("designation", getNodeValue("designation",elm));
user.put("location", getNodeValue("location",elm));
userList.add(user);
}
}
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = builderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(istream);
NodeList nList = doc.getElementsByTagName("user");for(int i =0;i<nList.getLength();i++){
if(nList.item(0).getNodeType() == Node.ELEMENT_NODE){
HashMap<String,String> user = new HashMap<>();
Element elm = (Element)nList.item(i);
user.put("name", getNodeValue("name",elm));
user.put("designation", getNodeValue("designation",elm));
user.put("location", getNodeValue("location",elm));
userList.add(user);
}
}
If you observe above code snippet, we used DocumentBuilderFactory, DocumentBuilder and Document objects to parse the XML data to get required information.
Now we will see how to parse XML data using DOM parser and bind the parsed XML data to Listview in android application with examples.
Android XML Parsing with DOM Parser Example
Following is the example of parsing the XML data and get the required information from it using DOM parser in android applications.
Create a new android application using android studio and give names as XMLParserExample. In case if you are not aware of creating an app in android studio check this article Android Hello World App.
Once we are done with creation of application, create an assets folder under /src/main folder and add new resource file (userdetails.xml), for that right click on assets folder à add new Android resource file à Give name as userdetails.xml like as shown below.
Now open userdetails.xml file and write the code like as shown below.
userdetails.xml
<?xml version="1.0" encoding="utf-8"?>
<users>
<user>
<name>Suresh Dasari</name>
<designation>Team Leader</designation>
<loation>Hyderabad</loation>
</user>
<user>
<name>Rohini Alavala</name>
<designation>Agricultural Officer</designation>
<loation>Guntur</loation>
</user>
<user>
<name>Trishika Dasari</name>
<designation>Charted Accountant</designation>
<loation>Guntur</loation>
</user>
</users>
Now open activity_main.xml file from \res\layout folder path and write the code like as shown below.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/user_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:dividerHeight="1dp" />
</LinearLayout>
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/user_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:dividerHeight="1dp" />
</LinearLayout>
After that create an another layout file (list_row.xml) in /res/layout folder to show the data in listview, for that right click on layout folder à add new Layout resource file à Give name as list_row.xml and write the code like as shown below.
list_row.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dip" >
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="17dp" />
<TextView
android:id="@+id/designation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/name"
android:layout_marginTop="7dp"
android:textColor="#343434"
android:textSize="14dp" />
<TextView
android:id="@+id/location"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/designation"
android:layout_alignBottom="@+id/designation"
android:layout_alignParentRight="true"
android:textColor="#343434"
android:textSize="14dp" />
</RelativeLayout>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dip" >
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="17dp" />
<TextView
android:id="@+id/designation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/name"
android:layout_marginTop="7dp"
android:textColor="#343434"
android:textSize="14dp" />
<TextView
android:id="@+id/location"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/designation"
android:layout_alignBottom="@+id/designation"
android:layout_alignParentRight="true"
android:textColor="#343434"
android:textSize="14dp" />
</RelativeLayout>
Now open your main activity file MainActivity.java from \java\com.tutlane.xmlparserexample path and write the code like as shown below
MainActivity.java
package com.tutlane.xmlparserexample;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.SimpleAdapter;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.HashMap;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try{
ArrayList<HashMap<String, String>> userList = new ArrayList<>();
ListView lv = (ListView) findViewById(R.id.user_list);
InputStream istream = getAssets().open("userdetails.xml");
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = builderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(istream);
NodeList nList = doc.getElementsByTagName("user");
for(int i =0;i<nList.getLength();i++){
if(nList.item(0).getNodeType() == Node.ELEMENT_NODE){
HashMap<String,String> user = new HashMap<>();
Element elm = (Element)nList.item(i);
user.put("name", getNodeValue("name",elm));
user.put("designation", getNodeValue("designation",elm));
user.put("location", getNodeValue("location",elm));
userList.add(user);
}
}
ListAdapter adapter = new SimpleAdapter(MainActivity.this, userList, R.layout.list_row,new String[]{"name","designation","location"}, new int[]{R.id.name, R.id.designation, R.id.location});
lv.setAdapter(adapter);
}
catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
protected String getNodeValue(String tag, Element element) {
NodeList nodeList = element.getElementsByTagName(tag);
Node node = nodeList.item(0);
if(node!=null){
if(node.hasChildNodes()){
Node child = node.getFirstChild();
while (child!=null){
if(child.getNodeType() == Node.TEXT_NODE){
return child.getNodeValue();
}
}
}
}
return "";
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try{
ArrayList<HashMap<String, String>> userList = new ArrayList<>();
ListView lv = (ListView) findViewById(R.id.user_list);
InputStream istream = getAssets().open("userdetails.xml");
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = builderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(istream);
NodeList nList = doc.getElementsByTagName("user");
for(int i =0;i<nList.getLength();i++){
if(nList.item(0).getNodeType() == Node.ELEMENT_NODE){
HashMap<String,String> user = new HashMap<>();
Element elm = (Element)nList.item(i);
user.put("name", getNodeValue("name",elm));
user.put("designation", getNodeValue("designation",elm));
user.put("location", getNodeValue("location",elm));
userList.add(user);
}
}
ListAdapter adapter = new SimpleAdapter(MainActivity.this, userList, R.layout.list_row,new String[]{"name","designation","location"}, new int[]{R.id.name, R.id.designation, R.id.location});
lv.setAdapter(adapter);
}
catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
protected String getNodeValue(String tag, Element element) {
NodeList nodeList = element.getElementsByTagName(tag);
Node node = nodeList.item(0);
if(node!=null){
if(node.hasChildNodes()){
Node child = node.getFirstChild();
while (child!=null){
if(child.getNodeType() == Node.TEXT_NODE){
return child.getNodeValue();
}
}
}
}
return "";
}
}
If you observe above code, we used DocumentBuilderFactory, DocumentBuilder and Document objects to get the required information from XML files.
Output of Android XML Parsing with DOM Parser Example
When we run above program in android studio we will get the result like as shown below.
This is how we can parse the XML data using DOM parser in android applications to get the required information.
No comments:
Post a Comment