xml解析之pull
发布时间:2020-12-16 05:53:15 所属栏目:百科 来源:网络整理
导读:Pull解析类似于SAX解析,也是基于事件的。 其解析用到的类很简单,只有一接口XmlPullParser,一工厂XmlPullParserFactory,和一个异常。 基本步骤是: 一、 得到工厂实例; 二、 得到解析器实例; 三、 设置解析器的数据流与编码方式 四、 通过循环加switch
Pull解析类似于SAX解析,也是基于事件的。 其解析用到的类很简单,只有一接口XmlPullParser,一工厂XmlPullParserFactory,和一个异常。 基本步骤是: 一、得到工厂实例; 二、得到解析器实例; 三、设置解析器的数据流与编码方式 四、通过循环加switch分支,处理五种基本的解析事件,即START_DOCUMENT,START_TAG,END_TAGEND_DOCUMENT,TEXT。 示例XML代码:
<?xml version="1.0" encoding="utf-8"?> <persons> <person name="Claw" age="24"> <weight>70kg</weight> <height>4325px</height> </person> <person name="Nancy" age="25"> <weight>54kg</weight> <height>4300px</height> </person> <person name="dearcloud" age="27"> <weight>55kg</weight> <height>4300px</height> </person> </persons>解析示例代码如下:
public static List<Map<String,String>> parse(InputStream is,String encode) { List<Map<String,String>> list = null; Map<String,String> map = null; try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); parser.setInput(is,encode); int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT: list = new ArrayList<Map<String,String>>(); break; case XmlPullParser.START_TAG: if (parser.getName().equals("person")) { map = new HashMap<String,String>(); map.put("age",parser.getAttributeValue(0)); } else if (parser.getName().equals("weight")) { map.put("weight",parser.nextText()); } else if (parser.getName().equals("height")) { map.put("height",parser.nextText()); } break; case XmlPullParser.END_TAG: if (parser.getName().equals("person")) { list.add(map); } break; default: break; } eventType = parser.next(); } } catch (Exception e) { e.printStackTrace(); } return list; }用这个方法,传入xml文件的流和节点名(和上篇同样),就可以解析xml文件了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- postgresql – 当布尔字段设置为true时,postgres更新日期字
- 如何实现VB.NET 打印控件的使用
- 从C#控制台应用程序迁移和运行REST API到ASP.NET
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第十七课:C
- ruby-on-rails – 如何访问rails action mailer中的current
- 《Cocos2d-x中的引用计数(Reference Count)和自动释放池(
- cocos2d-x学习笔记-CCAction(动作)
- 我在VAj3.5里导入了jaxp的*.jar文件,但我用了org.xml.sax.
- Ruby环境下安装使用bundler来管理多版本的gem
- C++ STL中map用法详解