Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में XMLPullParser से XML पार्स कैसे करें?

एंड्रॉइड में 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: चलाएं और वेरिफाई करें

  1. डिवाइस/एमुलेटर कनेक्ट करें।
  2. Run ▶ दबाएं।
  3. 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 में दिखाया।

  1. Android Toolbar में SearchView का उपयोग कैसे करें? Android Toolbar में SearchView का उपयोग कैसे करें?

    Android Toolbar/ActionBar में SearchView जोड़कर ListView फ़िल्टर करना टूलबार में सर्च आइकन जोड़कर ListView डेटा को रियल-टाइम फ़िल्टर करने का पूरा उदाहरण। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project। चरण 2: लेआउट में Toolbar और ListView res/layout/activity_main.xml: <?xml ve

  1. एंड्रॉइड में JSONObject से JSON पार्स कैसे करें? एंड्रॉइड में JSONObject से JSON पार्स कैसे करें?

    एंड्रॉइड में JSONObject का उपयोग करके JSON डेटा पार्स करना org.json.JSONObject एंड्रॉइड का बिल्ट-इन JSON पार्सर है — किसी थर्ड-पार्टी लाइब्रेरी की ज़रूरत नहीं। यह छोटे-मध्यम JSON स्ट्रक्चर्स के लिए सरल और प्रभावी है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio → File → New → New Project → Empty Activ

  1. Android ऐप में Volley लाइब्रेरी से JSON कैसे पार्स करें? Android ऐप में Volley लाइब्रेरी से JSON कैसे पार्स करें?

    Volley लाइब्रेरी से JSON पार्सिंग यह उदाहरण दर्शाता है कि Google की Volley लाइब्रेरी का उपयोग करके नेटवर्क से JSON डेटा कैसे प्राप्त करें और पार्स करें। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project से प्रोजेक्ट बनाएं। चरण 2: build.gradle में Volley डिपेंडेंसी जोड़ें dependencie