Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách sử dụng XMLPullParser để phân tích XML trong Android

Hướng dẫn này minh họa cách sử dụng XMLPullParser để phân tích (parse) dữ liệu XML trong ứng dụng Android. XMLPullParser là một trình phân tích XML hiệu quả, nhẹ và dễ sử dụng, phù hợp cho các ứng dụng di động.

Các bước thực hiện

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.

Bước 2: Layout chính (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <ListView
        android:id="@+id/listView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:dividerHeight="1dp" />

</LinearLayout>

Bước 3: Layout item danh sách (res/layout/row.xml)

Click chuột phải vào thư mục res/layout, chọn New → Layout resource file, đặt tên row.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://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/tvName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textStyle="bold"
        android:textSize="17dp" />

    <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="14dp" />

    <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_alignParentRight="true"
        android:textColor="#343434"
        android:textSize="14dp" />

</RelativeLayout>

Bước 4: Code MainActivity (src/MainActivity.java)

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
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;

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<>();
            HashMap<String, String> user = new HashMap<>();
            ListView lv = findViewById(R.id.listView);

            // Đọc file XML từ thư mục assets
            InputStream inputStream = getAssets().open("userdetails.xml");
            XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = parserFactory.newPullParser();
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            parser.setInput(inputStream, null);

            String tag = "", text = "";
            int event = parser.getEventType();

            while (event != XmlPullParser.END_DOCUMENT) {
                tag = parser.getName();
                switch (event) {
                    case XmlPullParser.START_TAG:
                        if (tag.equals("user")) {
                            user = new HashMap<>();
                        }
                        break;
                    case XmlPullParser.TEXT:
                        text = parser.getText();
                        break;
                    case XmlPullParser.END_TAG:
                        switch (tag) {
                            case "name":
                                user.put("name", text);
                                break;
                            case "designation":
                                user.put("designation", text);
                                break;
                            case "location":
                                user.put("location", text);
                                break;
                            case "user":
                                if (user != null) {
                                    userList.add(user);
                                }
                                break;
                        }
                        break;
                }
                event = parser.next();
            }

            ListAdapter adapter = new SimpleAdapter(this, userList, R.layout.row,
                    new String[]{"name", "designation", "location"},
                    new int[]{R.id.tvName, R.id.tvDesignation, R.id.tvLocation});
            lv.setAdapter(adapter);

        } catch (IOException | XmlPullParserException e) {
            e.printStackTrace();
        }
    }
}

Bước 5: Tạo file XML dữ liệu (assets/userdetails.xml)

Tạo thư mục assets (chuột phải main → New → Folder → Assets Folder), sau đó tạo file 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>
Lưu ý: Tag gốc trong file XML ví dụ có lỗi chính tả <loation>, đã sửa thành <location> để khớp với code Java.

Bước 6: Cấu hình AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <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/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run trong Android Studio. Ứng dụng sẽ đọc file XML từ assets, phân tích bằng XMLPullParser và hiển thị danh sách người dùng lên ListView.

Cách sử dụng XMLPullParser để phân tích XML trong Android