`

XmlPullParser解析xml文件

 
阅读更多

XML解析三种方式

DOM

通用性强,它会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据;

简单直观,但需要将文档读取到内存,并不太适合移动设备;

SAX

SAX是一个解析速度快并且占用内存少的xml解析器;

采用事件驱动,它并不需要解析整个文档;

实现:继承DefaultHandler,覆写startElement、endElement、characters等方法;

PULL

Android自带的XML解析器,和SAX基本类似,也是事件驱动,不同的是PULL事件返回的是数值型;推荐使用。

 

PULL解析XML核心代码

[java] view plaincopy
  1. XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();  
  2. parser.setInput(fileInputStream, “utf-8”);//设置数据源编码  
  3. int eventCode = parser.getEventType();//获取事件类型  
  4. while(eventCode != XmlPullParser.END_DOCUMENT)  {     
  5.     switch (eventCode){     
  6.         case XmlPullParser.START_DOCUMENT: //开始读取XML文档    
  7.         //实例化集合类    
  8.         break;     
  9.     case XmlPullParser.START_TAG://开始读取某个标签       
  10.         if("person".equals(parser.getName())) {     
  11.         //通过getName判断读到哪个标签,然后通过nextText()获取文本节点值,或通过getAttributeValue(i)获取属性节点值  
  12.         }     
  13.         break;  
  14.     case XmlPullParser.END_TAG://读完一个Person,可以将其添加到集合类中  
  15.         break;  
  16.     }  
  17.     parser.next();  
  18. }  

PULL解析XML示例方法

 
Java方法
[java] view plaincopy
  1. public static List<Person> readXML(InputStream inStream) {  
  2.     XmlPullParser parser = Xml.newPullParser();  
  3.     try {  
  4.         parser.setInput(inStream, "UTF-8");// 设置数据源编码  
  5.         int eventType = parser.getEventType();// 获取事件类型  
  6.         Person currentPerson = null;  
  7.         List<Person> persons = null;  
  8.         while (eventType != XmlPullParser.END_DOCUMENT) {  
  9.             switch (eventType) {  
  10.             case XmlPullParser.START_DOCUMENT:// 文档开始事件,可以进行数据初始化处理  
  11.                 persons = new ArrayList<Person>();// 实例化集合类  
  12.                 break;  
  13.             case XmlPullParser.START_TAG://开始读取某个标签  
  14.                 //通过getName判断读到哪个标签,然后通过nextText()获取文本节点值,或通过getAttributeValue(i)获取属性节点值  
  15.                 String name = parser.getName();  
  16.                 if (name.equalsIgnoreCase("person")) {  
  17.                     currentPerson = new Person();  
  18.                     currentPerson.setId(new Integer(parser.getAttributeValue(null"id")));  
  19.                 } else if (currentPerson != null) {  
  20.                     if (name.equalsIgnoreCase("name")) {  
  21.                         currentPerson.setName(parser.nextText());// 如果后面是Text元素,即返回它的值  
  22.                     } else if (name.equalsIgnoreCase("age")) {  
  23.                         currentPerson.setAge(new Short(parser.nextText()));  
  24.                     }  
  25.                 }  
  26.                 break;  
  27.             case XmlPullParser.END_TAG:// 结束元素事件  
  28.                 //读完一个Person,可以将其添加到集合类中  
  29.                 if (parser.getName().equalsIgnoreCase("person")&& currentPerson != null) {  
  30.                     persons.add(currentPerson);  
  31.                     currentPerson = null;  
  32.                 }  
  33.                 break;  
  34.             }  
  35.             eventType = parser.next();  
  36.         }  
  37.         inStream.close();  
  38.         return persons;  
  39.     } catch (Exception e) {  
  40.         e.printStackTrace();  
  41.     }  
  42.     return null;  
  43. }  


应用

XML文件
[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <persons>  
  3.     <person id="23">  
  4.         <name>孙洋洋</name>  
  5.         <age>30</age>  
  6.     </person>  
  7.     <person id="20">  
  8.         <name>孙彬彬</name>  
  9.         <age>25</age>  
  10.     </person>  
  11. </persons>  
Activity文件
[java] view plaincopy
  1. package com.app.data;  
  2.   
  3. import java.io.BufferedWriter;  
  4. import java.io.File;  
  5. import java.io.FileInputStream;  
  6. import java.io.FileNotFoundException;  
  7. import java.io.FileOutputStream;  
  8. import java.io.InputStream;  
  9. import java.io.OutputStreamWriter;  
  10. import java.net.HttpURLConnection;  
  11. import java.net.URL;  
  12. import java.util.ArrayList;  
  13. import java.util.HashMap;  
  14. import java.util.List;  
  15.   
  16. import org.xmlpull.v1.XmlPullParser;  
  17. import org.xmlpull.v1.XmlPullParserException;  
  18. import org.xmlpull.v1.XmlPullParserFactory;  
  19.   
  20. import com.app.other.Person;  
  21.   
  22. import android.app.Activity;  
  23. import android.os.Bundle;  
  24. import android.util.Xml;  
  25. import android.widget.TextView;  
  26.   
  27. public class XMLActivity extends Activity {  
  28.     @Override  
  29.     protected void onCreate(Bundle savedInstanceState) {  
  30.         // TODO Auto-generated method stub  
  31.         super.onCreate(savedInstanceState);  
  32.         setContentView(R.layout.activity_xml);  
  33.           
  34.         StringBuilder sBuilder = new StringBuilder();  
  35.         File xmlFile = new File("/mnt/sdcard/App/person.xml");  
  36.         try {  
  37.             FileInputStream inputStream = new FileInputStream(xmlFile);  
  38. //          URL url = new URL("http://10.0.2.2:8888/android/person.xml");  
  39. //          HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();  
  40. //          InputStream inputStream = urlConnection.getInputStream();  
  41.             List<Person> list = readXML(inputStream);  
  42.             for (int i = 0; i < list.size(); i++) {  
  43.                 Person person = list.get(i);  
  44.                 sBuilder.append("第-" + i + "-条记录:\n");  
  45.                 sBuilder.append("getName--" + person.getName() + "\n");  
  46.                 sBuilder.append("getAge--" + person.getAge() + "\n");  
  47.                 sBuilder.append("getId--" + person.getId() + "\n");  
  48.             }  
  49.             inputStream.close();  
  50.         } catch (Exception e) {  
  51.             // TODO Auto-generated catch block  
  52.             e.printStackTrace();  
  53.         }  
  54.         TextView textView = (TextView)findViewById(R.id.textView2);  
  55.         textView.setText(sBuilder);  
  56.     }  
  57.   
  58.     public static List<Person> readXML(InputStream inStream) {  
  59.         XmlPullParser parser = Xml.newPullParser();  
  60.         try {  
  61.             parser.setInput(inStream, "UTF-8");// 设置数据源编码  
  62.             int eventType = parser.getEventType();// 获取事件类型  
  63.             Person currentPerson = null;  
  64.             List<Person> persons = null;  
  65.             while (eventType != XmlPullParser.END_DOCUMENT) {  
  66.                 switch (eventType) {  
  67.                 case XmlPullParser.START_DOCUMENT:// 文档开始事件,可以进行数据初始化处理  
  68.                     persons = new ArrayList<Person>();// 实例化集合类  
  69.                     break;  
  70.                 case XmlPullParser.START_TAG://开始读取某个标签  
  71.                     //通过getName判断读到哪个标签,然后通过nextText()获取文本节点值,或通过getAttributeValue(i)获取属性节点值  
  72.                     String name = parser.getName();  
  73.                     if (name.equalsIgnoreCase("person")) {  
  74.                         currentPerson = new Person();  
  75.                         currentPerson.setId(new Integer(parser.getAttributeValue(null"id")));  
  76.                     } else if (currentPerson != null) {  
  77.                         if (name.equalsIgnoreCase("name")) {  
  78.                             currentPerson.setName(parser.nextText());// 如果后面是Text元素,即返回它的值  
  79.                         } else if (name.equalsIgnoreCase("age")) {  
  80.                             currentPerson.setAge(new Short(parser.nextText()));  
  81.                         }  
  82.                     }  
  83.                     break;  
  84.                 case XmlPullParser.END_TAG:// 结束元素事件  
  85.                     //读完一个Person,可以将其添加到集合类中  
  86.                     if (parser.getName().equalsIgnoreCase("person")&& currentPerson != null) {  
  87.                         persons.add(currentPerson);  
  88.                         currentPerson = null;  
  89.                     }  
  90.                     break;  
  91.                 }  
  92.                 eventType = parser.next();  
  93.             }  
  94.             inStream.close();  
  95.             return persons;  
  96.         } catch (Exception e) {  
  97.             e.printStackTrace();  
  98.         }  
  99.         return null;  
  100.     }  
  101. }  

XML布局文件
[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical"  
  6.     android:padding="15dp" >  
  7.   
  8.     <TextView  
  9.         android:id="@+id/textView1"  
  10.         android:layout_width="wrap_content"  
  11.         android:layout_height="wrap_content"  
  12.         android:text="XML文件读取"  
  13.         android:layout_gravity="center_horizontal" />  
  14.   
  15.     <TextView  
  16.         android:id="@+id/textView2"  
  17.         android:layout_width="wrap_content"  
  18.         android:layout_height="wrap_content"  
  19.         android:text="TextView" />  
  20.   
  21. </LinearLayout>  

XML文件位置


 
 
 
执行结果:
 
  • 大小: 37 KB
  • 大小: 23 KB
分享到:
评论

相关推荐

    XmlPullParser解析Xml文件解析demo

    XmlPullParser解析Xml文件解析demo,具体用法,请参考我的博客,老早上传的了,希望对大家有帮助,已经设置了0积分。请大家免费下载。

    android使用XmlPullParser来解析XML文件的一个例子

    见博客:http://blog.csdn.net/baidu_nod/article/details/38248633

    android XmlPullParser解析从车联网(即百度天气API)获取的天气XML文件

    进来很多人在找天气的API接口,所以乘此机会写了个在android平台用 XmlPullParser解析从车联网(即百度天气API)获取的天气XML文件!这是一个工具包,开发者可以直接拿过去调用,其中为了省时间,很多代码没优化,如...

    Android编程解析XML文件的方法详解【基于XmlPullParser】

    主要介绍了Android编程解析XML文件的方法,结合实例形式分析了Android基于XmlPullParser解析xml文件的相关操作技巧与注意事项,需要的朋友可以参考下

    xml文件生成与解析

    StringBuilder、XmlSerializer、XmlPullParser生成xml并解析xml文件

    Android XmlPullParser 方式解析 Xml 文档

    Android XmlPullParser 方式解析 Xml 文档 xml 文件格式 &lt;?xml version=1.0 encoding=UTF-8?&gt; 张三 &lt;age&gt;22 ...XmlPullParser 方式解析 xml 文件 import java.io.InputStream; im

    Android编程创建与解析xml的常用方法详解

    首先是创建,我们用XmlSerializer这个类来创建一个xml文件,其次是解析xml文件,常用的有dom,sax,XmlPullParser等方法,由于sax代码有点复杂,本节只讲解一下dom与XmlPullParser解析,sax我将会在下一节单独讲解,...

    Android开发中解析xml文件XmlUtils工具类与用法示例

    本文实例讲述了Android开发中解析xml文件XmlUtils工具类与用法。分享给大家供大家参考,具体如下: 1. xmlUtil工具类 package com.example.xmlpaserutil.util; import java.io.InputStream; import java.lang....

    Android App中使用Pull解析XML格式数据的使用示例

    Pull解析XML文件的方式与SAX解析XML文件的方式大致相同,他们都是基于事件驱动的。所以,利用pull解析XML文件需要下面几个步骤:  1)通过XMLPullParserFactory获取XMLPullParser对象。  2)通过XMLPullParser对象...

    在Android系统中解析XML文件的方法

    主要介绍了在Android系统中解析XML文件的方法,利用Java写成的XmlPullParser解析器,需要的朋友可以参考下

    基于Android XML解析与保存的实现

    解析XML文件:在Android平台上可以使用SAX、DOM和Android附带的pull解析器解析XML文件;pull解析器提供了各种事件,使用parser.next()方法进入下一个元素并触发相应事件,pull解析器产生的事件是一个数字,可以通过...

    基于Android的天气预报App源码毕业设计(高分项目).zip

    本项目采用了XmlPullParser解析技术,解析XML数据文件;密码加密用到了MD5算法;密码密保存储用到了sharePreferences;报备信息,个人资料信息,视频播放记录信息用sqlite存储;地图用到了高德地图官方sdk各个机型的...

    Android程序技术:个人学习助手项目习题详情显示.pptx

    逐行扫描XML文件,读取文件的同时即可进行解析处理,不必等到文件加载结束。缺点是无法进行增、删、改等操作。 SAX解析 一个开源的Java项目,既可以用于Android应用,也可以用于JavaEE程序。Android中已经集成了PULL...

    Android平台基于Pull方式对XML文件解析与写入方法详解

    本文详细讲述了Android平台基于Pull方式对XML文件解析与写入方法。分享给大家供大家参考,...XmlPullParser是一个Java实现的开源API包(源码下载地址http://www.xmlpull.org/),实现了pull方式解析xml文件的方法, And

    Android 使用Pull方法解析XML文件的方法

    Pull解析方法给应用程序完全的控制文档该怎么样被解析。Android中对Pull方法提供了支持的API,主要是 代码如下:org.xmlpull.v1.XmlPullParser;org.xmlpull.v1.XmlPullParserFactory;二个类,其中主要使用的是...

    Android天气预报App

    2.本项目采用了XmlPullParser解析技术,解析XML数据文件; 3.密码加密用到了MD5算法; 4.密码密保存储用到了sharePreferences; 5.报备信息,个人资料信息,视频播放记录信息用sqlite存储; 6.地图用到了高德地图...

    基于Android的天气预报App

    2.本项目采用了XmlPullParser解析技术,解析XML数据文件; 3.密码加密用到了MD5算法; 4.密码密保存储用到了sharePreferences; 5.报备信息,个人资料信息,视频播放记录信息用sqlite存储; 6.地图用到了高德地图...

    xmlpull + kxml

    3.设置解析文件 parser.setInput(new FileInputStream(new File&#40;"res/book.xml"&#41;), "UTF-8"); 4.第一个解析事件 int eventType = paser.getEventType(); 5.使用循环判断是否继续解析 while (eventType != ...

    Android加载Assets目录中Xml布局文件

    但是这种方法显然不太合适后来就发现了Android 其实提供了一个方法可以加载xml布局文件,就是使用inflate(XmlPullParser parser, ViewGroup root)这个方法,网上找了大批的文章,其中还是找到了两篇简单描写了下这个...

Global site tag (gtag.js) - Google Analytics