Android开发进阶(六)--原始XML文件的使用以及PULL解析小例

应用场景

在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文件

实现效果:

Android开发进阶(六)--原始XML文件的使用以及PULL解析小例_第1张图片

实现过程:

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.     } 

你可能感兴趣的:(Android开发进阶(六)--原始XML文件的使用以及PULL解析小例)