Android讀取XML資源

 

獲取XML文件的基本思路是,通過getResources().getXml()獲的XML原始文件,得到XmlResourceParser對象,通過該對象來判斷是文檔的開頭還是結尾,是某個標籤的開始還是結尾,並通過一些獲取屬性的方法來遍歷XML文件,從而訪問XML文件的內容,下面是一個訪問XML文件內容的例子,並將內容更顯示在一個TextView上

 

ReadXMLTest.java

Java代碼 複製代碼 收藏代碼
  1. /*  
  2.  * @author hualang  
  3.  */  
  4. package org.hualang.readxml;   
  5.   
  6. import java.io.IOException;   
  7. import org.xmlpull.v1.XmlPullParser;   
  8. import org.xmlpull.v1.XmlPullParserException;   
  9.   
  10. import android.app.Activity;   
  11. import android.content.res.Resources;   
  12. import android.content.res.XmlResourceParser;   
  13. import android.os.Bundle;   
  14. import android.view.View;   
  15. import android.view.View.OnClickListener;   
  16. import android.widget.Button;   
  17. import android.widget.TextView;   
  18. import org.hualang.readxml.R;   
  19.   
  20. public class ReadXMLTest extends Activity {   
  21.     private TextView myTextView;   
  22.     private Button myButton;   
  23.     @Override  
  24.     public void onCreate(Bundle savedInstanceState) {   
  25.         super.onCreate(savedInstanceState);   
  26.        setContentView(R.layout.main);   
  27.           
  28.        myTextView = (TextView)findViewById(R.id.text);   
  29.        myButton = (Button)findViewById(R.id.button);   
  30.        //設置按鈕監聽器   
  31.        myButton.setOnClickListener(new OnClickListener() {   
  32.         @Override  
  33.         public void onClick(View v) {   
  34.             //設置定時器   
  35.                int counter = 0;   
  36.                //實例化StringBuilder   
  37.                StringBuilder sb = new StringBuilder("");   
  38.                //得到Resources資源   
  39.                Resources r = getResources();   
  40.                //通過Resources,獲得XmlResourceParser實例   
  41.                XmlResourceParser xrp = r.getXml(R.xml.test);   
  42.                try {   
  43.                    //如果沒有到文件尾繼續執行   
  44.                 while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {    
  45.                     //如果是開始標籤   
  46.                          if (xrp.getEventType() == XmlResourceParser.START_TAG) {   
  47.                              //獲取標籤名稱   
  48.                               String name = xrp.getName();   
  49.                               //判斷標籤名稱是否等於friend   
  50.                               if(name.equals("friend")){   
  51.                                   counter++;   
  52.                                   //獲得標籤屬性追加到StringBuilder中   
  53.                                   sb.append("第"+counter+"個朋友的信息:"+"\n");   
  54.                                   sb.append(xrp.getAttributeValue(0)+"\n");   
  55.                                   sb.append(xrp.getAttributeValue(1)+"\n");   
  56.                                   sb.append(xrp.getAttributeValue(2)+"\n");   
  57.                                   sb.append(xrp.getAttributeValue(3)+"\n\n");   
  58.                               }   
  59.                          } else if (xrp.getEventType() == XmlPullParser.END_TAG) {    
  60.                          } else if (xrp.getEventType() == XmlPullParser.TEXT) {    
  61.                          }    
  62.                          //下一個標籤   
  63.                          xrp.next();    
  64.                     }   
  65.                 myTextView.setText(sb.toString());   
  66.             } catch (XmlPullParserException e) {   
  67.                 e.printStackTrace();   
  68.             } catch (IOException e) {   
  69.                 e.printStackTrace();   
  70.             }   
  71.         }   
  72.     });   
  73.     }   
  74. }  
/*
 * @author hualang
 */
package org.hualang.readxml;

import java.io.IOException;
import org.xmlpull.v1.XmlPullParser;
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.TextView;
import org.hualang.readxml.R;

public class ReadXMLTest extends Activity {
	private TextView myTextView;
	private Button myButton;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       
       myTextView = (TextView)findViewById(R.id.text);
       myButton = (Button)findViewById(R.id.button);
       //設置按鈕監聽器
       myButton.setOnClickListener(new OnClickListener() {
		@Override
		public void onClick(View v) {
			//設置定時器
			   int counter = 0;
			   //實例化StringBuilder
		       StringBuilder sb = new StringBuilder("");
		       //得到Resources資源
		       Resources r = getResources();
		       //通過Resources,獲得XmlResourceParser實例
	    	   XmlResourceParser xrp = r.getXml(R.xml.test);
		       try {
		    	   //如果沒有到文件尾繼續執行
				while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) { 
					//如果是開始標籤
					     if (xrp.getEventType() == XmlResourceParser.START_TAG) {
					    	 //獲取標籤名稱
					          String name = xrp.getName();
					          //判斷標籤名稱是否等於friend
					          if(name.equals("friend")){
					        	  counter++;
					        	  //獲得標籤屬性追加到StringBuilder中
					        	  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 (xrp.getEventType() == XmlPullParser.END_TAG) { 
					     } else if (xrp.getEventType() == XmlPullParser.TEXT) { 
					     } 
					     //下一個標籤
					     xrp.next(); 
					}
				myTextView.setText(sb.toString());
			} catch (XmlPullParserException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	});
    }
}

 

 

main.xml

Java代碼 複製代碼 收藏代碼
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >   
  7. <Button   
  8.     android:id="@+id/button"  
  9.     android:layout_width="fill_parent"  
  10.     android:layout_height="wrap_content"  
  11.     android:text="讀取XML文件內容"  
  12. />   
  13. <TextView     
  14.     android:id="@+id/text"  
  15.     android:layout_width="wrap_content"  
  16.     android:layout_height="wrap_content"    
  17.     android:text=""  
  18.     />   
  19. </LinearLayout>  
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<Button
	android:id="@+id/button"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:text="讀取XML文件內容"
/>
<TextView  
	android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text=""
    />
</LinearLayout>

 

res/xml目錄下的test.xml文件

Java代碼 複製代碼 收藏代碼
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <resources>   
  3.     <friend name="hualang" age="22" gender="male" email="[email protected]"/>   
  4.     <friend name="nimo" age="21" gender="female" email="[email protected]"/>   
  5. </resources>  
<?xml version="1.0" encoding="utf-8"?>
<resources>
	<friend name="hualang" age="22" gender="male" email="[email protected]"/>
	<friend name="nimo" age="21" gender="female" email="[email protected]"/>
</resources>

 

運行結果

注意:如果沒有加入import org.hualang.readxml.R;這句話,點擊按鈕後沒有反應,原因不知道


加入import org.hualang.readxml.R;後,運行結果如下
 

發佈了48 篇原創文章 · 獲贊 6 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章