android之XmlResourceParser类使用实例

来源:互联网 发布:数据质量行业标准规范 编辑:程序博客网 时间:2024/05/16 06:59

http://www.iteye.com/topic/1122056


android开发过程会经常使用XML文件,下面提供小实例,看看XmlResourceParser类是怎么样解析XML文件的。

XML文件名称为test.xml。内容如下:

 

 

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <customer name="luopeng"  age="21"  gender="1" emial="dylankeepmoving@163.com"/>  
  4.     <customer name="dylan"  age="22"  gender="2"  emial="710097663@qq.com"/>  
  5.     <customer name="android"  age="6"  gender="2"  emial="android@gmail.com"/>  
  6. </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代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <TextView  
  8.         android:id="@+id/textview01"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:text="@string/hello" />  
  12.     <Button    
  13.         android:id="@+id/btn01"  
  14.         android:layout_width="wrap_content"  
  15.         android:layout_height="wrap_content"  
  16.         android:text="@string/btn01"  
  17.         />  
  18.     <EditText    
  19.         android:id="@+id/edittext01"  
  20.         android:layout_width="wrap_content"  
  21.         android:layout_height="wrap_content"  
  22.         android:text="@string/eidttext01"  
  23.         />  
  24. </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:

 

 

 

Java代码 复制代码 收藏代码
  1. package com.dylan.xmlresourceparser;   
  2.   
  3. import java.io.IOException;   
  4.   
  5. import org.xmlpull.v1.XmlPullParserException;   
  6.   
  7. import android.app.Activity;   
  8. import android.content.res.Resources;   
  9. import android.content.res.XmlResourceParser;   
  10. import android.os.Bundle;   
  11. import android.view.View;   
  12. import android.view.View.OnClickListener;   
  13. import android.widget.Button;   
  14. import android.widget.EditText;   
  15.   
  16. /*  
  17.  * 此类的作用是点击按钮后在EditView上显示资源文件(一个XML)中的内容  
  18.  * 此例中会使用到XMLResourceParser  
  19.  */  
  20. public class TestXmlResourceParserActivity extends Activity {   
  21.     /** Called when the activity is first created. */  
  22.     private EditText et;   
  23.     private Button myButton;   
  24.   
  25.     @Override  
  26.     public void onCreate(Bundle savedInstanceState) {   
  27.         super.onCreate(savedInstanceState);   
  28.         setContentView(R.layout.main);   
  29.   
  30.         // 变量在内部类中使用的前提是此变量必须是final修饰的   
  31.         myButton = (Button) this.findViewById(R.id.btn01);   
  32.         et = (EditText) this.findViewById(R.id.edittext01);   
  33.         myButton.setOnClickListener(new OnClickListener() {   
  34.             StringBuilder sb = new StringBuilder("");   
  35.             Resources res = getResources();   
  36.             XmlResourceParser xrp = res.getXml(R.xml.test);   
  37.   
  38.             @Override  
  39.             public void onClick(View v) {   
  40.                 int counter = 0;   
  41.                 try {   
  42.                     // 判断是否到了文件的结尾   
  43.                     while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {   
  44.                         //文件的内容的起始标签开始,注意这里的起始标签是test.xml文件里面<resources>标签下面的第一个标签   
  45.                         if (xrp.getEventType() == XmlResourceParser.START_TAG) {   
  46.                             String tagname = xrp.getName();   
  47.                             if (tagname.endsWith("customer")) {   
  48.                                 counter++;   
  49.                                 sb.append("这是第" + counter + "客户"+"\n");   
  50.                                 sb.append("姓名:"+xrp.getAttributeValue(0)+"\n");   
  51.                                 sb.append("年龄:"+xrp.getAttributeValue(1)+"\n");   
  52.                                 sb.append("性别:"+xrp.getAttributeValue(2)+"\n");   
  53.                                 sb.append("邮箱:"+xrp.getAttributeValue(3)+"\n\n");   
  54.                             }   
  55.                         }   
  56.                         // 下面的两个else if什么作用呢?   
  57.                         else if (xrp.getEventType() == XmlResourceParser.END_TAG) {   
  58.                         } else if (xrp.getEventType() == XmlResourceParser.TEXT) {   
  59.                         }    
  60.                         xrp.next();   
  61.                     }   
  62.                     //程序细节注意的地方,StringBuilder要条用toString()方法,不要粗心忘记了   
  63.                     et.setText(sb.toString());   
  64.                 } catch (XmlPullParserException e) {   
  65.   
  66.                 } catch (IOException e) {   
  67.                     e.printStackTrace();   
  68.                 }   
  69.             }   
  70.         });   
  71.     }   
  72. }  
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;@Overridepublic 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);@Overridepublic 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();}}});}}

  运行结果如下图: