Android開發進階(五)–使用原始的XML文件 – Android移動開發技術文章_手機開發 Android移動開發教學課程

應用場景

在Android應用開發過程中,有時候我們自己有一些XML文件是我們自己手動創建的,而在項目開發過程中可能會用到,也就是說這用到瞭原始的XML資源文件。這個XML原始資源文件我們可以通過Resouce類的以下兩個方法來獲得:

getResouce.getXml(int id);

getRawResouce(int id)

這兩個方法返回的對象是一個XmlResouceParser類的對象。而XmlResouceParser類是XmlPullParser類的子類,所以我們可以Android內置的Pull模式解析我們的XML文件,這也是本人比較喜歡的一種解析XML文件方式。因為它相對於DOM解析具有占有內存小,解析快,相對於SAX來說編寫代碼不那麼復雜,隻要編寫那麼一點代碼就可以完成對XML文件的解析。

關於PULL模式解析XML文件,可以參看我之前寫的一篇文章:

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

 

/kf/201112/115458.html

 

PULL模式解析實例 :使用原始XML文件

 

 

 

實現效果:

 

 

實現過程:

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


<?xml version="1.0" encoding="UTF-8"?> 
<persons> 
    <person id="1"> 
        <name>張三</name> 
        <age>20</age> 
    </person> 
    <person id="2"> 
        <name>李四</name> 
        <age>22</age> 
    </person> 
</persons> 
<?xml version="1.0" encoding="UTF-8"?>
<persons>
 <person id="1">
  <name>張三</name>
  <age>20</age>
 </person>
 <person id="2">
  <name>李四</name>
  <age>22</age>
 </person>
</persons>
 

 

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


<?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" > 
    <Button 
        android:id="@+id/btnParser" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="解析原始XML資源文件" /> 
    <EditText 
        android:id="@+id/edtContent" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:lines="5" /> 
</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" >
    <Button
        android:id="@+id/btnParser"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="解析原始XML資源文件" />
    <EditText
        android:id="@+id/edtContent"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:lines="5" />
</LinearLayout>
 

3、編寫Activity的代碼


package com.jiahui.xmlres; 
 
import android.app.Activity; 
import android.content.res.XmlResourceParser; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
 
public class XmlResTestActivity extends Activity { 
 
    private Button btnParser; 
    private EditText edtContent; 
 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        btnParser = (Button) this.findViewById(R.id.btnParser); 
        edtContent = (EditText) this.findViewById(R.id.edtContent); 
         
        btnParser.setOnClickListener(new View.OnClickListener() { 
 
            @Override 
            public void onClick(View v) { 
                // 獲取res/xml下的原生XML文件  
                XmlResourceParser parser = getResources().getXml(R.xml.persons); 
                try { 
 
                    StringBuilder sb = new StringBuilder(); 
                    int eventType = parser.getEventType(); 
                    while (eventType != XmlResourceParser.END_DOCUMENT) { 
 
                        switch (eventType) { 
                        case XmlResourceParser.START_TAG: 
 
                            String tagName = parser.getName(); 
 
                            if (("person").equals(tagName)) { 
 
                                // 得到第一個屬性  
                                String personid = parser.getAttributeValue(0); 
                                sb.append("ID:" + personid); 
 
                            } else if ("name".equals(parser.getName())) { 
                                String name = parser.nextText(); 
                                sb.append("姓名:" + name); 
 
                            } else if ("age".equals(parser.getName())) { 
                                String age = parser.nextText(); 
                                sb.append("年齡:" + age); 
                            } 
                            break; 
                        case XmlResourceParser.END_TAG: 
                            // 結束時加一個空行  
                            if ("person".equals(parser.getName())) { 
                                sb.append("\n"); 
                            } 
                            break; 
                        default: 
                            break; 
                        } 
                        // 解析下一個事件  www.aiwalls.com
                        eventType = parser.next(); 
                    } 
                    // 將解析的結果放在文本編輯框  
                    edtContent.setText(sb.toString()); 
 
                } catch (Exception e) { 
                    // TODO: handle exception  
                } 
            } 
        }); 
    } 

摘自 jiahui524專欄
 

發佈留言