XML解析之Pull解析方式
2016-10-16 19:52
162 查看
XML文件:
总体上的思路是这样的:
先获得一个XmlParser对象,然后从文档开始读到文档结束,然后获取每个标签后面的文本内容。
写代码之前先来介绍下几个函数以及标志。
输出:
如下图:
所以这里我们姑且可以这么理解:(个人理解,若有错误请帮忙指出,非常感谢)
getEventType获取每个元素的类型,如果是结点开始端(如< app>)的话,就返回 START TAG,当检测到START TAG 就去检测结点的名字,然后获取对应的文本,当检测到节点结尾返回END TAG(如< / app>)当然你也可以用getEventType检测判断是否为文本类型,如果是就获取他的文本内容。
<apps> <app> <id>1</id> <name>gogle</name> <version>1.0</version> </app> <app> <id>2</id> <name>Chrome</name> <version>2.0</version> </app> <app> <id>3</id> <name>gogle PLAY</name> <version>3.0</version> </app> </apps>
总体上的思路是这样的:
先获得一个XmlParser对象,然后从文档开始读到文档结束,然后获取每个标签后面的文本内容。
写代码之前先来介绍下几个函数以及标志。
public interface Xmlparser int START_TAG Returned from getEventType(), next(), nextToken() when a start tag was read.(大致意思是,当开始标签被读取由getEventType(),next(), nextToken()函数返回这个值。) int END_TAG Returned from getEventType(), next(), or nextToken() when an end tag was read.(当结束标签被读取由getEventType(),next(), nextToken()函数返回这个值。) int END_DOCUMENT Logical end of the xml document.(逻辑XML文件结尾) abstract int getEventType() Returns the type of the current event (ST 4000 ART_TAG, END_TAG, TEXT, etc.) (返回当前event类型) abstract String getName() For START_TAG or END_TAG events, the (local) name of the current element is returned when namespaces are enabled. (返回当前元素名) abstract String nextText() If current event is START_TAG then if next element is TEXT then element content is returned or if next event is END_TAG then empty string is returned, otherwise exception is thrown.(当前event是 START_TAG,返回后面的文本内容)
private void parseXmlWithPull(String data){ try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser pullParser=factory.newPullParser(); pullParser.setInput(new StringReader(data)); int eventType=pullParser.getEventType(); String id=""; String name=""; String version=""; while (eventType!=XmlPullParser.END_DOCUMENT){ Log.d(TAG,"eventType is: "+eventType); Log.d(TAG,"event name is: "+pullParser.getName()); switch (eventType){ case XmlPullParser.START_TAG: { if (pullParser.getName().equals("id")) { id = pullParser.nextText(); } else if (pullParser.getName().equals("name")) { name = pullParser.nextText(); } else if (pullParser.getName().equals("version")) { version = pullParser.nextText(); } break; } case XmlPullParser.END_TAG:{ if (pullParser.getName().equals("app")){ Log.d(TAG, "id is:" + id); Log.d(TAG, "name is:" + name); Log.d(TAG, "version is:" + version); } } default: break; } eventType=pullParser.next(); } }catch (Exception e){ e.printStackTrace(); } }
输出:
/*0: START_DOCUMENT 1:END_DOCUMENT 2:START_TAG 3:END_TAG 4:TEXT */ 10-16 08:19:10.910 968-1012/com.example.administrator.testforparse D/Test: eventType is: 0 10-16 08:19:10.910 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.910 968-1012/com.example.administrator.testforparse D/Test: eventType is: 2 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: event name is: apps 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: eventType is: 2 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: event name is: app 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: eventType is: 2 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: event name is: id 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: eventType is: 2 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: event name is: name 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.920 968-1012/com.example.administrator.testforparse D/Test: eventType is: 2 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: version 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 3 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: app 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: id is:1 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: name is:gogle 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: version is:1.0 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 2 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: app 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 2 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: id 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 2 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: name 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 2 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: version 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 3 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: app 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: id is:2 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: name is:Chrome 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: version is:2.0 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 2 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: app 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 2 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: id 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 2 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: name 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 2 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: event name is: version 10-16 08:19:10.930 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.950 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.950 968-1012/com.example.administrator.testforparse D/Test: eventType is: 3 10-16 08:19:10.950 968-1012/com.example.administrator.testforparse D/Test: event name is: app 10-16 08:19:10.950 968-1012/com.example.administrator.testforparse D/Test: id is:3 10-16 08:19:10.950 968-1012/com.example.administrator.testforparse D/Test: name is:gogle PLAY 10-16 08:19:10.950 968-1012/com.example.administrator.testforparse D/Test: version is:3.0 10-16 08:19:10.950 968-1012/com.example.administrator.testforparse D/Test: eventType is: 4 10-16 08:19:10.950 968-1012/com.example.administrator.testforparse D/Test: event name is: null 10-16 08:19:10.950 968-1012/com.example.administrator.testforparse D/Test: eventType is: 3 10-16 08:19:10.950 968-1012/com.example.administrator.testforparse D/Test: event name is: apps
如下图:
所以这里我们姑且可以这么理解:(个人理解,若有错误请帮忙指出,非常感谢)
getEventType获取每个元素的类型,如果是结点开始端(如< app>)的话,就返回 START TAG,当检测到START TAG 就去检测结点的名字,然后获取对应的文本,当检测到节点结尾返回END TAG(如< / app>)当然你也可以用getEventType检测判断是否为文本类型,如果是就获取他的文本内容。
相关文章推荐
- Android XML解析学习——Pull方式
- 三种方式解析XML(DOM,Pull,Sax,并带文件编码识别).........................by 私念
- Android 创建与解析XML(四)—— Pull方式
- Android学习指南之三十一:Android中使用SAX和pull方式解析XML
- Android 创建与解析XML(四)—— Pull方式
- Hello Android - PULL方式解析XML
- Android解析XML三种方式(PULL、SAX、DOM)
- android解析XML总结(SAX、Pull、Dom三种方式)
- Android解析XML三种方式(PULL、SAX、DOM)
- Android XML解析学习——Pull方式
- android使用pull的方式解析xml
- android解析XML总结(SAX、Pull、Dom三种方式)
- android pull 解析xml方式
- Android 创建与解析XML(四)—— Pull方式
- Android Pull方式解析XML
- Android中xml解析方式(SAX,PULL原理)
- Android XML解析Pull方式———解析网络数据示例
- android解析XML总结(SAX、Pull、Dom三种方式)
- Android XML解析学习——Pull方式
- android解析XML的三种方式(DOM,SAX,PULL)