Android资源的使用之XML资源

需要作为资源读取的XML文件,通常放置于res/xml目录,打包的时候将会被编译成二进制文件。要访问这些xml需要用到XmlPullParser对象。

view sourceprint?1 Resources res = activity.getResources();  

2 XmlResourceParser xpp = res.getXml(R.xml.test);

这里的XmlResourceParser就是XmlPullParser的实例

下面就是XmlPullParser访问XML节点的代码

view sourceprint?01 private String getEventsFromAnXMLFile(Activity activity)  

02     throws XmlPullParserException, IOException  

03     {  

04        StringBuffer sb = new StringBuffer();  

05        Resources res = activity.getResources();  

06        XmlResourceParser xpp = res.getXml(R.xml.test);  

07           

08        xpp.next();  

09        int eventType = xpp.getEventType();  

10         while (eventType != XmlPullParser.END_DOCUMENT)   

11         {  

12             if(eventType == XmlPullParser.START_DOCUMENT)   

13             {  

14                sb.append("******Start document");  

15             }   

16             else if(eventType == XmlPullParser.START_TAG)   

17             {  

18                sb.append("\nStart tag "+xpp.getName());  

19             }   

20             else if(eventType == XmlPullParser.END_TAG)   

21             {  

22                sb.append("\nEnd tag "+xpp.getName());  

23             }   

24             else if(eventType == XmlPullParser.TEXT)   

25             {  

26                   

27                 sb.append("\nText "+xpp.getText());  

28             }  

29             eventType = xpp.next();  

30         }//eof-while  

31         sb.append("\n******End document");  

32         return sb.toString();  

33     }//eof-function

这里遍历了整个XML文档,并输出节点的名称及内容









3.5.2  原始XML文件的使用

获得原始XML文件的基本思路是,通过getResources().getXml()获得XML原始文件,得到XmlResourceParser对象,通过该对象来判断是文档的开始还是结尾、是某个标签的开始还是结尾,并通过一些获得属性的方法来遍历XML文件,从而访问XML文件的内容。下面的实例演示了如何访问XML文件内容,并将内容显示在一个TextView中。

在"Chapter03_Resource"工程中的res\xml\目录下,创建一个test.xml文件。该文件中定义了两条客户信息,属性信息有姓名、年龄、性别和E-mail地址,内容如下所示。

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <customer name="tom" age="20" gender="male" email="[email protected]"/>
     <customer name="kite" age="21" gender="male" email="[email protected]"/>
</resources> 在该工程的res\layout\目录下,创建一个test_xml.xml布局文件,该布局文件中添加一个Button和一个TextView视图组件。Button用于响应单击事件访问XML内容,TextView用于显示XML内容。

<?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:text="获得XML内容"       android:id="@+id/xmltTestButton01"       android:layout_width="wrap_content"       android:layout_height="wrap_content"></Button>
           <TextView
      android:text=""       android:id="@+id/xmlContentTextView01"       android:layout_width="wrap_content"       android:layout_height="wrap_content"
    />
       </LinearLayout>
在该工程的com.amaker.ch03.xml包中创建一个TestXmlActivity类。在该类顶部声明使用到的TextView和Button,在onCreate()方法中实例化,添加Button的单击事件,获得XML内容显示在TextView中。

package com.amaker.ch03.xml;
   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 com.amaker.test.R;
  /**
   *
    * @author 郭宏志
  * 测试xml资源
   */
  public class TestXmlActivity extends Activity {
     private TextView myTextView;
      private Button myButton;
      @Override
      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);
          // 设置当前Activity的内容布局视图
         setContentView(R.layout.test_xml);
         // 通过findViewById方法获得TextView实例
        myTextView = (TextView)findViewById(R.id.xmlContentTextView01);
          // 通过findViewById方法获得Button实例
        myButton = (Button)findViewById(R.id.xmltTestButton01);
         // 设置按钮的单击事件监听器
        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();
                             // 判断标签名称是否等于customer
                              if(name.equals("customer")){                                    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();                       }                     // 将StringBuilder设置为TextView的文本                    myTextView.setText(sb.toString());              } catch (XmlPullParserException e) {                  e.printStackTrace();              } catch (IOException e) {                  e.printStackTrace();              }          }      });      }  }

你可能感兴趣的:(android,xml,OS)