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

      运行结果如下图:


  • 相关阅读:
    jchdl
    jchdl
    UVa 10256 (判断两个凸包相离) The Great Divide
    UVa 11168 (凸包+点到直线距离) Airport
    LA 2572 (求可见圆盘的数量) Kanazawa
    UVa 10652 (简单凸包) Board Wrapping
    UVa 12304 (6个二维几何问题合集) 2D Geometry 110 in 1!
    UVa 10674 (求两圆公切线) Tangents
    UVa 11796 Dog Distance
    LA 3263 (平面图的欧拉定理) That Nice Euler Circuit
  • 原文地址:https://www.cnblogs.com/carbs/p/2583829.html
Copyright © 2011-2022 走看看