एंड्रॉइड में XMLPullParser का उपयोग करके XML डेटा पार्स करना
XMLPullParser एंड्रॉइड में XML प्रोसेसिंग के लिए एक हल्का, कुशल और लो-मेमोरी पार्सर है। यह "पुल" मॉडल पर काम करता है — यानी आप पार्सर से अगला इवेंट मांगते हैं, बजाय इसके कि पार्सर आपको कॉलबैक दे (जैसे SAX)। यह बड़े XML फाइल्स के लिए आदर्श है।
पूर्व-आवश्यकताएं
- Android Studio प्रोजेक्ट
- Assets फोल्डर में XML फाइल (
userdetails.xml) - इंटरनेट परमिशन (अगर नेटवर्क से XML लोड कर रहे हों)
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio → File → New → New Project → "Empty Activity" → प्रोजेक्ट डिटेल्स भरें → Finish।
चरण 2: Main Layout (activity_main.xml)
एक ListView जो पार्स्ड डेटा दिखाएगा:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:dividerHeight="1dp" />
</LinearLayout>
चरण 3: Row Layout (res/layout/row.xml)
प्रत्येक यूज़र के लिए कस्टम रो — नाम, पदनाम, स्थान:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp">
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="17sp" />
<TextView
android:id="@+id/tvDesignation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tvName"
android:layout_marginTop="7dp"
android:textColor="#343434"
android:textSize="14sp" />
<TextView
android:id="@+id/tvLocation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/tvDesignation"
android:layout_alignBottom="@id/tvDesignation"
android:layout_alignParentEnd="true"
android:textColor="#343434"
android:textSize="14sp" />
</RelativeLayout>
चरण 4: XML डेटा फाइल (assets/userdetails.xml)
assets फोल्डर बनाएं (Right-click res → New → Folder → Assets Folder) और userdetails.xml डालें:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<users>
<user>
<name>Sehwag</name>
<designation>Vice Captain</designation>
<location>Delhi</location>
</user>
<user>
<name>Ashwin</name>
<designation>Off Spin Bowler</designation>
<location>Chennai</location>
</user>
<user>
<name>Dhoni</name>
<designation>Captain</designation>
<location>Ranchi</location>
</user>
</users>
</resources>
नोट: मूल कोड में<loation>टाइपो था — इसे<location>में सुधारा गया है।
चरण 5: MainActivity.java — पार्सिंग लॉजिक
package com.example.xmlpullparserdemo;
import android.os.Bundle;
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.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = findViewById(R.id.listView);
List<Map<String, String>> userList = new ArrayList<>();
try {
// Assets से XML फाइल पढ़ें
InputStream inputStream = getAssets().open("userdetails.xml");
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(false); // नेमस्पेस नहीं हैं
XmlPullParser parser = factory.newPullParser();
parser.setInput(inputStream, "UTF-8");
int eventType = parser.getEventType();
Map<String, String> currentUser = null;
String currentTag = "";
String textContent = "";
while (eventType != XmlPullParser.END_DOCUMENT) {
currentTag = parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if ("user".equals(currentTag)) {
currentUser = new HashMap<>();
}
break;
case XmlPullParser.TEXT:
textContent = parser.getText().trim();
break;
case XmlPullParser.END_TAG:
if (currentUser != null) {
switch (currentTag) {
case "name":
currentUser.put("name", textContent);
break;
case "designation":
currentUser.put("designation", textContent);
break;
case "location":
currentUser.put("location", textContent);
break;
case "user":
userList.add(currentUser);
currentUser = null;
break;
}
}
break;
}
eventType = parser.next();
}
// एडाप्टर सेट करें
String[] from = {"name", "designation", "location"};
int[] to = {R.id.tvName, R.id.tvDesignation, R.id.tvLocation};
SimpleAdapter adapter = new SimpleAdapter(
this, userList, R.layout.row, from, to
);
listView.setAdapter(adapter);
} catch (IOException | XmlPullParserException e) {
e.printStackTrace();
}
}
}
चरण 6: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.xmlpullparserdemo">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.XmlPullParserDemo">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
चरण 7: चलाएं और वेरिफाई करें
- डिवाइस/एमुलेटर कनेक्ट करें।
- Run ▶ दबाएं।
- ListView में तीन यूज़र्स — Sehwag, Ashwin, Dhoni — उनके पदनाम और स्थान के साथ दिखेंगे।
💡 XMLPullParser vs अन्य पार्सर्स
| पार्सर | मेमोरी | स्पीड | उपयोग में आसानी | सबसे अच्छा लिए |
|---|---|---|---|---|
| XMLPullParser | कम | तेज़ | मध्यम | बड़े XML, स्ट्रीमिंग |
| DOM Parser | अधिक (पूरा ट्री लोड करता है) | धीमा | आसान | छोटे XML, रैंडम एक्सेस |
| SAX Parser | कम | तेज़ | कठिन (पुश मॉडल) | बड़े XML, सीक्वेंशियल रीड |
सारांश
XMLPullParser एंड्रॉइड में XML पार्सिंग का मानक, कुशल तरीका है। यह START_TAG, TEXT, END_TAG इवेंट्स के ज़रिए डेटा निकालता है। ऊपर दिए गए उदाहरण में हमने Assets से XML पढ़कर SimpleAdapter के ज़रिए ListView में दिखाया।