• 主题: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();
    				}
    			}
    		});
    	}
    }

      运行结果如下图:


  • 相关阅读:
    Windows 系统里面的 hosts 文件
    JDK 安装目录中 native2ascii.exe 命令详解
    火狐浏览器安装 Modify Headers 插件
    java iterator
    HashSet HashTable HashMap的区别
    c# 序列化
    Oracle 同步
    QL Server 高可用性(一)AlwaysOn 技术
    sqlserver 日志传送
    oracle forall
  • 原文地址:https://www.cnblogs.com/carbs/p/2583829.html
Copyright © 2020-2023  润新知