http://www.iteye.com/topic/1122056
android開發過程會經常使用XML文件,下面提供小實例,看看XmlResourceParser類是怎么樣解析XML文件的。
XML文件名稱為test.xml。內容如下:
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <customer name="luopeng" age="21" gender="1" emial="dylankeepmoving@163.com"/>
- <customer name="dylan" age="22" gender="2" emial="710097663@qq.com"/>
- <customer name="android" age="6" gender="2" emial="android@gmail.com"/>
- </resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<customer name="luopeng" age="21" gender="1" emial="dylankeepmoving@163.com"/>
<customer name="dylan" age="22" gender="2" emial="710097663@qq.com"/>
<customer name="android" age="6" gender="2" emial="android@gmail.com"/>
</resources>
布局文件main.xml內容如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/textview01"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello" />
- <Button
- android:id="@+id/btn01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/btn01"
- />
- <EditText
- android:id="@+id/edittext01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/eidttext01"
- />
- </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textview01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/btn01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn01"
/>
<EditText
android:id="@+id/edittext01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/eidttext01"
/>
</LinearLayout>
如下則是具體解析XML文件的類TestXmlResourceParserActivity.java:
- package com.dylan.xmlresourceparser;
- import java.io.IOException;
- import org.xmlpull.v1.XmlPullParserException;
- import android.app.Activity;
- import android.content.res.Resources;
- import android.content.res.XmlResourceParser;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- /*
- * 此類的作用是點擊按鈕后在EditView上顯示資源文件(一個XML)中的內容
- * 此例中會使用到XMLResourceParser
- */
- public class TestXmlResourceParserActivity extends Activity {
- /** Called when the activity is first created. */
- private EditText et;
- private Button myButton;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // 變量在內部類中使用的前提是此變量必須是final修飾的
- myButton = (Button) this.findViewById(R.id.btn01);
- et = (EditText) this.findViewById(R.id.edittext01);
- myButton.setOnClickListener(new OnClickListener() {
- StringBuilder sb = new StringBuilder("");
- Resources res = getResources();
- XmlResourceParser xrp = res.getXml(R.xml.test);
- @Override
- public void onClick(View v) {
- int counter = 0;
- try {
- // 判斷是否到了文件的結尾
- while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
- //文件的內容的起始標簽開始,注意這里的起始標簽是test.xml文件里面<resources>標簽下面的第一個標簽
- if (xrp.getEventType() == XmlResourceParser.START_TAG) {
- String tagname = xrp.getName();
- if (tagname.endsWith("customer")) {
- counter++;
- sb.append("這是第" + counter + "客戶"+"\n");
- sb.append("姓名:"+xrp.getAttributeValue(0)+"\n");
- sb.append("年齡:"+xrp.getAttributeValue(1)+"\n");
- sb.append("性別:"+xrp.getAttributeValue(2)+"\n");
- sb.append("郵箱:"+xrp.getAttributeValue(3)+"\n\n");
- }
- }
- // 下面的兩個else if什么作用呢?
- else if (xrp.getEventType() == XmlResourceParser.END_TAG) {
- } else if (xrp.getEventType() == XmlResourceParser.TEXT) {
- }
- xrp.next();
- }
- //程序細節注意的地方,StringBuilder要條用toString()方法,不要粗心忘記了
- et.setText(sb.toString());
- } catch (XmlPullParserException e) {
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- });
- }
- }
package com.dylan.xmlresourceparser;
import java.io.IOException;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
/*
* 此類的作用是點擊按鈕后在EditView上顯示資源文件(一個XML)中的內容
* 此例中會使用到XMLResourceParser
*/
public class TestXmlResourceParserActivity extends Activity {
/** Called when the activity is first created. */
private EditText et;
private Button myButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 變量在內部類中使用的前提是此變量必須是final修飾的
myButton = (Button) this.findViewById(R.id.btn01);
et = (EditText) this.findViewById(R.id.edittext01);
myButton.setOnClickListener(new OnClickListener() {
StringBuilder sb = new StringBuilder("");
Resources res = getResources();
XmlResourceParser xrp = res.getXml(R.xml.test);
@Override
public void onClick(View v) {
int counter = 0;
try {
// 判斷是否到了文件的結尾
while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
//文件的內容的起始標簽開始,注意這里的起始標簽是test.xml文件里面<resources>標簽下面的第一個標簽
if (xrp.getEventType() == XmlResourceParser.START_TAG) {
String tagname = xrp.getName();
if (tagname.endsWith("customer")) {
counter++;
sb.append("這是第" + counter + "客戶"+"\n");
sb.append("姓名:"+xrp.getAttributeValue(0)+"\n");
sb.append("年齡:"+xrp.getAttributeValue(1)+"\n");
sb.append("性別:"+xrp.getAttributeValue(2)+"\n");
sb.append("郵箱:"+xrp.getAttributeValue(3)+"\n\n");
}
}
// 下面的兩個else if什么作用呢?
else if (xrp.getEventType() == XmlResourceParser.END_TAG) {
} else if (xrp.getEventType() == XmlResourceParser.TEXT) {
}
xrp.next();
}
//程序細節注意的地方,StringBuilder要條用toString()方法,不要粗心忘記了
et.setText(sb.toString());
} catch (XmlPullParserException e) {
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
運行結果如下圖: