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.
