xmlPull 解析xml实例
package com.stz; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; import android.app.Activity; import android.os.Bundle; import android.text.method.ScrollingMovementMethod; import android.widget.TextView; public class XmlPullActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String str=""; String xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<people> "+ "<person personid=\"e01\" enable=\"true\"> "+ "<name>张三</name> "+ "<tel>5128</tel> "+ "<email>txq512@sina.com</email> "+ "</person> "+ "<person personid=\"e02\" enable=\"false\"> "+ "<name>meixin</name> "+ "<tel>5252525</tel> "+ "<email>wnight88@sina.com</email> "+ "</person> "+ "<person personid=\"e03\" enable=\"true\"> "+ "<name>yu</name> "+ "<tel>5389654</tel> "+ "<email>yu@188.net</email> "+ "</person> "+ "</people> "; ByteArrayInputStream stream = new ByteArrayInputStream(xml.getBytes()); try { File file=new File("F:/text.xml"); //FileInputStream filinput=new FileInputStream(file); //FileReader fileRe=new FileReader(file); XmlPullParserFactory pullFactory=XmlPullParserFactory.newInstance(); XmlPullParser pullParser=pullFactory.newPullParser(); pullParser.setInput(stream,null); int entype=pullParser.getEventType(); while (entype!=XmlPullParser.END_DOCUMENT) { switch(entype){ case XmlPullParser.START_DOCUMENT: str+="开始读xml文档"; break; case XmlPullParser.START_TAG: str+="\n"+pullParser.getName(); for(int i=0;i<pullParser.getAttributeCount();i++){ str+= pullParser.getAttributeName(i) + "--" + pullParser.getAttributeValue(i); } break; case XmlPullParser.END_TAG: str+="\n"+pullParser.getName(); break; case XmlPullParser.TEXT: str+="\n"+pullParser.getText(); break; case XmlPullParser.END_DOCUMENT: str+="读完xml文档"; break; } entype=pullParser.next(); } TextView txt=(TextView)findViewById(R.id.txt); txt.setMovementMethod(ScrollingMovementMethod.getInstance()); txt.setText(str); } catch (Exception e) { e.printStackTrace(); } } }
xmlPull 和Sax 解析xml的区别:
PULL方式比较简单,而且可以根据判断停止解析(DOM和SAX都需要对文件的文章解析中途不能停止)。
一、DOM方式解析:
xml是先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据。这个写起来很简单,但是很消耗内存。要是数据过大,手机不够牛逼,可能手机直接死机。
常用的DoM接口和类:
Document:该接口定义分析并创建DOM文档的一系列方法,它是文档树的根,是操作DOM的基础。 Element:该接口继承Node接口,提供了获取、修改XML元素名字和属性的方法。 Node:该接口提供处理并获取节点和子节点值的方法。 NodeList:提供获得节点个数和当前节点的方法。这样就可以迭代地访问各个节点。 DOMParser:该类是Apache的Xerces中的DOM解析器类,可直接解析XML文件。
二、SAX解析技术:
SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
常用的接口和类:
Attrbutes:用于得到属性的个数、名字和值。 DefaultHandler:它提供了这些接LI的缺省实现。在大多数情况下,为应用程序扩展DefaultHandler并覆盖相关的方法
三、XMLPull
XML pull提供了开始元素和结束元素。当某个元素开始时,我们可以调用parser.nextText0从XML文档中提取所有字符数据。当解释到一个文档结束时,自动生成EndDocument 事件。
常用的接口和类:
XmlPullParser:XML pull解析器是一个在XMLPULL VlAP1中提供了定义解析功能的接口。 XmlSerializer:它是一个接口,定义了XML信息集的序列。 XmlPullParserFactory:这个类用于在XMPULL V1 API中创建XML Pull解析器。