XmlPullParser解析xml文件
2016-06-30 20:34
513 查看
现在介绍我们的Pull解析的使用,知识点,理解以及它的缺点和优点
以上是我对Pull解析的理解,下面就把代码演示一下
xml文档就简单了手写了几个
MainActivity.xml 具体步骤的操作
Android并未提供对Java StAX API的支持。但是,Android附带了一个pull解析器,其工作方式类似于StAX。它允许用户的应用程序代码从解析器中获取事件,这与SAX解析 器自动将事件推入处理程序相反。 PULL解析器的运行方式和SAX类似,都是基于事件的模式。不同的是,在PULL解析过程中返回的是数字,且我们需要自己获取产生的事件然后做相应的操作,而不像SAX那样由处理器触发一种事件的方法,执行我们的代码。 读取到xml的声明返回 START_DOCUMENT; 读取到xml的结束返回 END_DOCUMENT ; 读取到xml的开始标签返回 START_TAG 读取到xml的结束标签返回 END_TAG 读取到xml的文本返回 TEXT PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器,Android官方推荐开发者们使用Pull解析技术。Pull解析技术是第三方开发的开源技术,它同样可以应用于JavaSE开发。 PULL 的工作原理:XML pull提供了开始元素和结束元素。当某个元素开始时,我们可以调用parser.nextText从XML文档中提取所有字符数据。当解释到一个文档结 束时,自动生成EndDocument事件。 常用的XML pull的接口和类: XmlPullParser:XML pull解析器是一个在XMLPULL VlAP1中提供了定义解析功能的接口。 XmlSerializer:它是一个接口,定义了XML信息集的序列。 XmlPullParserFactory:这个类用于在XMPULL V1 API中创建XML Pull解析器。 XmlPullParserException:抛出单一的XML pull解析器相关的错误。
以上是我对Pull解析的理解,下面就把代码演示一下
xml文档就简单了手写了几个
<?xml version="1.0" encoding="utf-8"?> <Books> <Book> <name>红楼梦</name> <author >曹雪芹</author> <price>15.3</price> </Book> <Book> <name>三国演义</name> <author>罗贯中</author> <price>19.4</price> </Book> <Book> <name>水浒传</name> <author>施耐庵</author> <price>17.4</price> </Book> <Book> <name>西游记</name> <author>吴承恩</author> <price>12.9</price> </Book> </Books>
MainActivity.xml 具体步骤的操作
public class MainActivity extends Activity { private List<Books> bList; private Books books; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); PullXml(); } private void PullXml() { // TODO Auto-generated method stub try { // 创建工厂得到factory属性 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); // 通过factory属性获取parse XmlPullParser parser = factory.newPullParser(); // 设置流 parser.setInput(getAssets().open("Books.xml"), "UTF-8"); int eventType = parser.getEventType(); while (parser.getEventType() != XmlPullParser.END_DOCUMENT) { switch (eventType) { // 开始解析元素 case XmlPullParser.START_TAG: if("Books".equals(parser.getName())){ bList=new ArrayList<>(); }else if("Book".equals(parser.getName())){ books=new Books(); }else if("name".equals(parser.getName())){ //获取一下节点的文本 String name=parser.nextText(); books.setName(name); }else if("author".equals(parser.getName())){ //获取一下节点的文本 String author=parser.nextText(); books.setAuthor(author); }else if("price".equals(parser.getName())){ //获取一下节点的文本 String price=parser.nextText(); books.setPrice(Float.valueOf(price)); } break; case XmlPullParser.END_TAG: if("Book".equals(parser.getName())){ bList.add(books); } break; } //把指针移动到下一个节点,并返回节点的事件类型 eventType = parser.next(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } for (Books book : bList) { Log.i("TAG", book.toString()); } } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试