Theoretical Paper
- Computer Organization
- Data Structure
- Digital Electronics
- Object Oriented Programming
- Discrete Mathematics
- Graph Theory
- Operating Systems
- Software Engineering
- Computer Graphics
- Database Management System
- Operation Research
- Computer Networking
- Image Processing
- Internet Technologies
- Micro Processor
- E-Commerce & ERP
- Dart Programming
- Flutter Tutorial
- Numerical Methods Tutorials
- Flutter Tutorials
- Kotlin Tutorial
Practical Paper
Industrial Training
Kotlin Android XML Parsing using DOM Parser
XML document is commonly used to share the data on the internet. The data provided in XML format are able to update frequently and parsing them is a common task for network-based apps.
In Android, there are three types of XML parsers to parse the XML data and read them in android applications, these are:
- DOM Parser
- SAX Parser
- XMLPullParser
Android DOM (Document Object Model) parser uses an object-based approach to create and parse the XML files in android applications. The DOM parser loads the XML file into memory to parse the XML document. Due to this reason, it consumes more memory.
Example of XML Parsing using DOM Parser
In this example, we parse XML data and display them into ListView.
activity_main.xml
Add the ListView in the activity_main.xml layout.
< ?xml version="1.0" encoding="utf-8"?> < android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="example.javatpoint.com.kotlinxmlparsingusingdomparser.MainActivity"> < ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"> < /ListView> < /android.support.constraint.ConstraintLayout>
empdetail.xml
Create the XML document empdetail.xml in assets directory to parse the data using DOM parser.
< ?xml version="1.0" encoding="utf-8"?> < records> < employee> < name>Sachin Kumar< /name> < salary>50000< /salary> < designation>Developer< /designation> < /employee> < employee> < name>Rahul Kumar< /name> < salary>60000< /salary> < designation>Team Leader< /designation> < /employee> < employee> < name>John Mike< /name> < salary>70000< /salary> < designation>Manager< /designation> < /employee> < employee> < name>Ajay Kumar name> < salary>45000< /salary> < designation>Developer< /designation> < /employee> < employee> < name>Toni Nayer< /name> < salary>55000< /salary> < designation>Marketing< /designation> < /employee> < employee> < name>Mr Bony< /name> < salary>42000< /salary> < designation>Sales< /designation> < /employee> < employee> < name>Raj Kumar< /name> < salary>30000< /salary> < designation>Production< /designation> < /employee> < employee> < name>Rahul Kumar< /name> < salary>60000< /salary> < designation>Team Leader< /designation> < /employee> < employee> < name>John Mike< /name> < salary>70000< /salary> < designation>Manager< /designation> < /employee> < employee> < name>Sachin Kumar< /name> < salary>50000< /salary> < designation>Developer< /designation> < /employee> < employee> < name>Rahul Kumar< /name> < salary>60000< /salary> < designation>Team Leader< /designation> < /employee> < employee> < name>John Mike< /name> < salary>70000< /salary> < designation>Manager< /designation> < /employee> < /records>
custom_list.xml
Create a custom layout to display the list of data into ListView.
< ?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> < LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical"> < TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="name" android:textStyle="bold" android:layout_marginLeft="15dp" android:layout_marginStart="15dp" android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" /> < TextView android:id="@+id/salary" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="salary" android:layout_marginLeft="15dp" android:layout_marginStart="15dp" android:layout_marginTop="5dp" android:textSize="16sp"/> < TextView android:id="@+id/designation" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="designation" android:layout_marginLeft="15dp" android:layout_marginStart="15dp" android:layout_marginTop="5dp" android:textSize="16sp"/> < /LinearLayout> < /LinearLayout>
MainActivity.kt
Add the following code to read and parse the XML data using DOM parser. Create the instance of DocumentBuilderFactory, DocumentBuilder and Document objects.
The HashMap< String, String> is used to read the data from XML document and add them into ArrayList().
package example.javatpoint.com.kotlinxmlparsingusingdomparser import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.widget.ListView import android.widget.SimpleAdapter import org.w3c.dom.Element import org.w3c.dom.Node import org.xml.sax.SAXException import java.io.IOException import javax.xml.parsers.DocumentBuilderFactory import javax.xml.parsers.ParserConfigurationException class MainActivity : AppCompatActivity() { var empDataHashMap = HashMap< String, String>() var empList: ArrayList< HashMap< String, String>> = ArrayList() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) try { val lv = findViewById< ListView>(R.id.listView) val istream = assets.open("empdetail.xml") val builderFactory = DocumentBuilderFactory.newInstance() val docBuilder = builderFactory.newDocumentBuilder() val doc = docBuilder.parse(istream) //reading the tag "employee" of empdetail file val nList = doc.getElementsByTagName("employee") for (i in 0 until nList.getLength()) { if (nList.item(0).getNodeType().equals(Node.ELEMENT_NODE) ) { //creating instance of HashMap to put the data of node value empDataHashMap = HashMap() val element = nList.item(i) as Element empDataHashMap.put("name", getNodeValue("name", element)) empDataHashMap.put("salary", getNodeValue("salary", element)) empDataHashMap.put("designation", getNodeValue("designation", element)) //adding the HashMap data to ArrayList empList.add(empDataHashMap) } } val adapter = SimpleAdapter(this@MainActivity, empList, R.layout.custom_list, arrayOf("name", "salary", "designation"), intArrayOf(R.id.name, R.id.salary, R.id.designation)) lv.setAdapter(adapter) } catch (e: IOException) { e.printStackTrace() } catch (e: ParserConfigurationException) { e.printStackTrace() } catch (e: SAXException) { e.printStackTrace() } } // function to return node value protected fun getNodeValue(tag: String, element: Element): String { val nodeList = element.getElementsByTagName(tag) val node = nodeList.item(0) if (node != null) { if (node.hasChildNodes()) { val child = node.getFirstChild() while (child != null) { if (child.getNodeType() === Node.TEXT_NODE) { return child.getNodeValue() } } } } return "" } }
Output: