Android開發進階(五)--使用原始的XML文件

 

應用場景 html

在Android應用開發過程當中,有時候咱們本身有一些XML文件是咱們本身手動建立的,而在項目開發過程當中可能會用到,也就是說這用到了原始的XML資源文件。這個XML原始資源文件咱們能夠經過Resouce類的如下兩個方法來得到: java

getResouce.getXml(int id); android

getRawResouce(int id) app

這兩個方法返回的對象是一個XmlResouceParser類的對象。而XmlResouceParser類是XmlPullParser類的子類,因此咱們能夠Android內置的Pull模式解析咱們的XML文件,這也是本人比較喜歡的一種解析XML文件方式。由於它相對於DOM解析具備佔有內存小,解析快,相對於SAX來講編寫代碼不那麼複雜,只要編寫那麼一點代碼就能夠完成對XML文件的解析。 ide

關於PULL模式解析XML文件,能夠參看我以前寫的一篇文章: 佈局

Android平臺下的XML文件解析之PULL模式解析 . ui

http://blog.csdn.net/jiahui524/article/details/6955196 this

實例 :使用原始XML文件 spa

 

實現效果: .net

 

實現過程:

一、在res/下新建一個xml的文件夾,在這個文件夾下新建一個person.xml文件,內容以下

[html]   view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <persons>  
  3.     <person id="1">  
  4.         <name>張三</name>  
  5.         <age>20</age>  
  6.     </person>  
  7.     <person id="2">  
  8.         <name>李四</name>  
  9.         <age>22</age>  
  10.     </person>  
  11. </persons>  


 

二、編寫佈局文件:main.xml

[html]   view plain copy print ?
  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.     <Button  
  7.         android:id="@+id/btnParser"  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="解析原始XML資源文件" />  
  11.     <EditText  
  12.         android:id="@+id/edtContent"  
  13.         android:layout_width="fill_parent"  
  14.         android:layout_height="wrap_content"  
  15.         android:lines="5" />  
  16. </LinearLayout>  


三、編寫Activity的代碼

[java]   view plain copy print ?
  1. package com.jiahui.xmlres;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.res.XmlResourceParser;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.widget.Button;  
  8. import android.widget.EditText;  
  9.   
  10. public class XmlResTestActivity extends Activity {  
  11.   
  12.     private Button btnParser;  
  13.     private EditText edtContent;  
  14.   
  15.     public void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.main);  
  18.         btnParser = (Button) this.findViewById(R.id.btnParser);  
  19.         edtContent = (EditText) this.findViewById(R.id.edtContent);  
  20.           
  21.         btnParser.setOnClickListener(new View.OnClickListener() {  
  22.   
  23.             @Override  
  24.             public void onClick(View v) {  
  25.                 // 獲取res/xml下的原生XML文件  
  26.                 XmlResourceParser parser = getResources().getXml(R.xml.persons);  
  27.                 try {  
  28.   
  29.                     StringBuilder sb = new StringBuilder();  
  30.                     int eventType = parser.getEventType();  
  31.                     while (eventType != XmlResourceParser.END_DOCUMENT) {  
  32.   
  33.                         switch (eventType) {  
  34.                         case XmlResourceParser.START_TAG:  
  35.   
  36.                             String tagName = parser.getName();  
  37.   
  38.                             if (("person").equals(tagName)) {  
  39.   
  40.                                 // 獲得第一個屬性  
  41.                                 String personid = parser.getAttributeValue(0);  
  42.                                 sb.append("ID:" + personid);  
  43.   
  44.                             } else if ("name".equals(parser.getName())) {  
  45.                                 String name = parser.nextText();  
  46.                                 sb.append("姓名:" + name);  
  47.   
  48.                             } else if ("age".equals(parser.getName())) {  
  49.                                 String age = parser.nextText();  
  50.                                 sb.append("年齡:" + age);  
  51.                             }  
  52.                             break;  
  53.                         case XmlResourceParser.END_TAG:  
  54.                             // 結束時加一個空行  
  55.                             if ("person".equals(parser.getName())) {  
  56.                                 sb.append("\n");  
  57.                             }  
  58.                             break;  
  59.                         default:  
  60.                             break;  
  61.                         }  
  62.                         // 解析下一個事件  
  63.                         eventType = parser.next();  
  64.                     }  
  65.                     // 將解析的結果放在文本編輯框  
  66.                     edtContent.setText(sb.toString());  
  67.   
  68.                 } catch (Exception e) {  
  69.                     // TODO: handle exception  
  70.                 }  
  71.             }  
  72.         });  
  73.     }  
  74. }  


 

如需轉載引用請註明出處:http://blog.csdn.net/jiahui524

相關文章
相關標籤/搜索