zoukankan      html  css  js  c++  java
  • 主题:android之XmlResourceParser类使用实例 转

    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;
    
    	@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();
    				}
    			}
    		});
    	}
    }

      运行结果如下图:


  • 相关阅读:
    完全二叉树求结点左右孩子编号
    while(p)的作用
    数组和链表的区别
    Seqlist L 与 Seqlist *L的区别
    exit和return
    java EE 的页面获得路径
    如何理解asp.net的AutoEventWireup
    asp.net的服务器控件客户端空件的区别以及如何刷新页面不靠数据库数据停留在页面
    外部样式?内联样式?内部样式表?区别
    html 与 htm的区别
  • 原文地址:https://www.cnblogs.com/carbs/p/2583829.html
Copyright © 2011-2022 走看看