Java Xml Pull Parser Example

In android, the XMLPullParser interface provides the functionality to parse the XML files in android applications. The XMLPullParser is a simple and efficient parser method to parse the XML data when compared to other parser methods such as DOM Parser and SAX Parser. The XMLPullParser has a method next() that provides access to high-level parsing events. The next() method will advance the parser to the next event. The following are the series of events available in XMLPullParser, which will be seen by the next() method.

  1. START_DOCUMENT: The parser starts processing the XML document.
  2. START_TAG: In this event, we can get the start tag in XML.
  3. TEXT: In this event, we can read the text content using the getText() method.
  4. END_TAG: An end tag was read.
  5. END_DOCUMENT: No more events are available.

Note that we are going to implement this project using theKotlin language. One may also perform XML Parsing in another two ways. Please refer to the below articles:

  • XML Parsing in Android using DOM Parser
  • XML Parsing in Android using SAX Parser

What we are going to do?

XMLPullParser scrutinizes an XML file with a series of events, such as START_DOCUMENT, START_TAG, TEXT, END_TAG, and END_DOCUMENT to parse the XML document. To read and parse XML files using XMLPullParser in android, one needs to create an instance of XMLPullParserFactory, and XMLPullParser.

Approach

To parse an XML file using a DOM parser in Android, we follow the following steps:

Step 1: Create a New Project

To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Kotlin as the programming language.

Step 2: Create an assets folder

Create an assets folder under the main folder in the Project Layout. Create an Android Resource File in this folder, where we shall put the information in the form of XML. Name this file as userdetails.xml. For doing so refer to the following steps:

Click on Project as shown on the left side of the below image.

Click on project

Expand until you find the main folder, right-click on it, go to New > Folder > Assets Folder

Asset folder

Then just click on the Finish button.

asset folder

Now the asset folder is created successfully. Right-Click on the Assets Folder > New > Android Resource FIle

asset folder

Give it name Information, change type to XML, and finish.

Note: Sometimes, right-clicking on the Assets folder and creating an Android Resource File creates a file in the res folder. If this happens, cut our file and paste it directly into the assets folder. This happens due to some internal settings.

asset folder

Paste this information which is in the form of XML, that is to be displayed in the userdetails.xml file. Below is the code for the userdetails.xml file.

XML

<? xml version = "1.0" encoding = "utf-8" ?>

< users >

< user >

< name >Tom</ name >

< designation >Actor and Producer</ designation >

</ user >

< user >

< name >Danny</ name >

< designation >Music Director</ designation >

</ user >

< user >

< name >Christopher</ name >

< designation >Writer</ designation >

</ user >

</ users >

Step 3: Working with the activity_main.xml file

Now go to the activity_main.xml file which represents the UI of the application. Create a ListView as shown. Below is the code for the activity_main.xml file.

XML

<? xml version = "1.0" encoding = "utf-8" ?>

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


Step 4: Create another layout file

Go to app > res > layout > right-click > New > Layout Resource File and name the file as list_row. list_row.xml file is used to show the data in the ListView. Below is the code for the list_row.xml file.

XML

<? xml version = "1.0" encoding = "utf-8" ?>

< 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:textSize = "17dp"

android:textStyle = "bold" />

< 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" />

</ RelativeLayout >

Step 5: Working with the MainActivity.kt file

Finally, go to the MainActivity.kt file, and refer to the following code. Below is the code for theMainActivity.kt file. Comments are added inside the code to understand the code in more detail.

Kotlin

import android.os.Bundle

import android.widget.ListAdapter

import android.widget.ListView

import android.widget.SimpleAdapter

import androidx.appcompat.app.AppCompatActivity

import org.xmlpull.v1.XmlPullParser

import org.xmlpull.v1.XmlPullParserException

import org.xmlpull.v1.XmlPullParserFactory

import java.io.IOException

import java.util.*

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

super .onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

try {

val userList = ArrayList<HashMap<String, String?>>()

var user = HashMap<String, String?>()

val lv = findViewById<ListView>(R.id.user_list)

val istream = assets.open( "userdetails.xml" )

val parserFactory = XmlPullParserFactory.newInstance()

val parser = parserFactory.newPullParser()

parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false )

parser.setInput(istream, null )

var tag: String? = ""

var text: String? = ""

var event = parser.eventType

while (event != XmlPullParser.END_DOCUMENT) {

tag = parser.name

when (event) {

XmlPullParser.START_TAG -> if (tag == "user" ) user = HashMap()

XmlPullParser.TEXT -> text = parser.text

XmlPullParser.END_TAG -> when (tag) {

"name" -> user[ "name" ] = text

"designation" -> user[ "designation" ] = text

"user" -> userList.add(user)

}

}

event = parser.next()

}

val adapter: ListAdapter = SimpleAdapter( this , userList, R.layout.list_row,

arrayOf( "name" , "designation" ), intArrayOf(R.id.name, R.id.designation)

)

lv.adapter = adapter

} catch (e: IOException) {

e.printStackTrace()

} catch (e: XmlPullParserException) {

e.printStackTrace()

}

}

}

Output: Run on Emulator

Output


barnettecaut1938.blogspot.com

Source: https://www.geeksforgeeks.org/xml-parsing-in-android-using-xmlpullparser/

0 Response to "Java Xml Pull Parser Example"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel