`

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”中,我们将探讨如何利用XmlPullParser来解析XML文件,以及其在实际开发中的应用。 XML(eXtensible Markup Language)是一种用于标记数据的标记语言,广泛用于数据交换...

    XMlPullParser解析网上资源xml

    XMLPullParser是Android开发中用于解析XML文档的一种高效且节省内存的方法。它提供了一种事件驱动的解析模型,允许开发者逐个处理XML文档的元素,而不是一次性加载整个文档到内存中,这对于处理大体积的XML数据尤其...

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

    本篇文章将详细探讨如何在Android中使用XmlPullParser来解析XML文件,并通过一个具体的WeiboTest示例进行说明。 首先,理解XmlPullParser的工作原理至关重要。它是一个基于事件驱动的解析器,通过一系列的回调方法...

    Android实现向本地写入一个XML文件和解析XML文件

    5. 使用XmlPullParser解析XML文件 6. 指定解析的文件和编码格式 7. 使用while循环解析XML文件 8. 获得事件类型,例如开始元素、结束元素、文本元素等 在Android开发中,XML文件解析和使用XML保存一些信息变得非常...

    android 解析XML文件 生成XML文件

    本文将深入探讨如何使用SAX、DOM和Pull解析器解析XML文件,以及如何生成XML文件。我们将同时展示Java和Kotlin两种语言的实现方法。 一、SAX解析XML文件 SAX(Simple API for XML)是一种事件驱动的解析器,它不会一...

    Android解析XML文件升级APK的方法

    在本文中,我们介绍了 Android 解析 XML 文件升级 APK 的方法,其中包括使用 XmlPullParser 解析 XML 文件和使用 DownloadManager 升级 APK 等。这些方法可以帮助我们轻松地解析 XML 文件和升级 APK,从而提高 ...

    android中xml的创建以及一些解析xml的常用方法.doc

    第一个按钮创建XML文件,后两个按钮分别使用DOM和XmlPullParser解析XML文件,并将结果展示在TextView中。这种做法有助于开发者直观地理解这两种解析方法的使用。 总结来说,Android开发中XML的创建和解析是重要的...

    Android 解析xml文件

    本篇将深入探讨Android中解析XML文件的方法,以及如何通过示例代码`ReadXmlConfigFile`来实现这一过程。 ### XML解析器类型 Android提供了多种解析XML的方式,主要包括以下几种: 1. **DOM解析器**:Document ...

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

    本文将详细介绍Android编程解析XML文件的方法,结合实例形式分析了Android基于XmlPullParser解析xml文件的相关操作技巧与注意事项。 XmlPullParser是Android系统中提供的一种解析XML文件的方法,它基于事件驱动的...

    volley联网解析网络上的xml文件

    总的来说,Volley联网解析XML文件的关键在于创建自定义的`Request`子类,正确地解析XML数据,并在响应回调中处理解析结果。通过这种方式,我们可以利用Volley的强大功能和XML的灵活性,实现高效、可靠的网络数据交换...

    使用Pull解析器读取XML文件和生成XML文件

    Pull解析器是一种轻量级的解析方式,它允许程序在解析XML时按需获取数据,而不需要一次性加载整个文档到内存,从而提高了效率和资源利用率。 首先,我们来了解XML的基本结构。XML文件由一系列元素构成,每个元素由...

    android中XML的创建与解析

    本教程将重点讲解如何在Android中创建XML文件以及使用DOM和XmlPullParser解析XML文件。以下是对这两个主题的详细说明。 首先,我们来看如何使用`XmlSerializer`创建XML文件。`XmlSerializer`是Android SDK中的一个...

    xmlPullParser解析器jar包

    使用XMLPullParser解析XML的基本步骤如下: 1. 创建XmlPullParserFactory对象。 2. 使用factory创建XmlPullParser对象。 3. 设置输入源,可以是文件、流或字符数组。 4. 遍历XML事件,处理开始标签(START_TAG)、...

    android 解析XML文件代码

    本教程将深入讲解如何在Android中解析XML文件,帮助开发者更好地理解和运用这一核心技术。 首先,Android提供了两种主要的XML解析方式:DOM(Document Object Model)解析和SAX(Simple API for XML)解析。DOM解析...

    Android解析xml(3)---Pull解析

    本篇文章将重点讨论如何在Android中使用Pull解析器(PullParser)来解析XML文件。Pull解析器是一种事件驱动的解析方式,它允许应用程序在解析过程中按需获取XML数据,而不是一次性加载整个文档到内存,这使得处理...

    在android中使用pull解析xml文件

    本文将深入探讨如何在Android中使用Pull解析器解析XML文件。 一、XML Pull解析器简介 XML Pull解析器(XML Pull API)是一种基于事件驱动的解析模型,它不需预先加载整个XML文档,而是逐行读取,当遇到特定的XML...

    使用Pull解析xml文件

    在Android开发中,解析XML有多种方式,包括DOM(Document Object Model)、SAX(Simple API for XML)以及PULL(PULL Parser)。本篇文章将详细探讨PULL解析器,它是Android平台特有的一种轻量级、事件驱动的XML解析...

    android之Pull解析XML文件

    接下来,我们将详细介绍Pull解析XML文件的过程。 1. **引入Pull解析器库** 在Android项目中,首先需要添加对`androidx.xml`库的依赖,确保解析器可用。在`build.gradle`文件中添加以下依赖: ```gradle ...

    android SAX PULL 解析XML文件 代码 详解

    SAX解析适合大型XML文件和复杂结构,而PULL解析则适用于小型XML文件和简单结构。在提供的`SAXParseDemo`项目中,你可以找到具体的SAX解析实现,通过阅读和理解代码,可以更好地掌握这两种解析方法的使用。 总之,...

    Android XmlPullParser 方式解析 Xml 文档

    【Android中的XmlPullParser解析XML】 在Android开发中,处理XML数据时,`XmlPullParser`是一种高效且节省内存的解析方式。它是基于事件驱动的解析器,可以逐行读取XML文档,通过监听各种事件(如开始文档、开始...

Global site tag (gtag.js) - Google Analytics