Android 使用原始XML资源

在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模式解析 .

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

实例 :使用原始XML文件

 

实现效果:

 

实现过程:

1、在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>  


 

2、编写布局文件: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>  


3、编写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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值