XML解析之Pull解析
来源:互联网 发布:古兰经软件30本 编辑:程序博客网 时间:2024/04/29 16:18
在安卓中最常用的解析方式应该是pull解析,它自身比较方便,可以灵活控制读取节点的开始和停止。
那么具体怎么用pull来解析xml文档呢?
首先我们来看一个比较简单的xml文件是什么样的:
如下:名字为book.xml的文档
<?xml version="1.0" encoding="utf-8"?><resources> <book id="1"> <name>java</name> <price>20</price> </book> <book id="2"> <name>android</name> <price>30</price> </book></resources>
我们可以看到这个名字叫book.xml的文档最上面有一个声明语句
这句话呢就对应着解析文档的开始。
那么我们最终能够解析出来一个什么样子的东西,才叫xml的解析呢?
就以上xml,我希望能够解析出一本书的名字和价格,就可以了,其他的都不重要。
好了,开始解析。
一、新建一个Book类用来存放解析出的数据
public class Book { String name; String price; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } @Override public String toString() { return "name:"+name+"\n"+"price"+price; }}
二、建立一个接口,接口中包含解析的方法
public interface PullParser { /** * * 解析输入流,获取Beauty列表 * @param is * @return * @throws Exception */ public List<Book> parse(InputStream is) throws Exception; /** * * 序列化Beauty对象集合,得到XML形式的字符串 * @param beauties * @return * @throws Exception */ public String serialize(List<Book> beauties) throws Exception;}
三、建立解析类,继承自接口(目的是封装解析的方法)
public class ParserXml implements PullParser { List<Book> books; Book book; @Override public List<Book> parse(InputStream is) throws Exception { // 由android.util.Xml创建一个XmlPullParser实例 XmlPullParser xpp = Xml.newPullParser(); // 设置输入流 并指明编码方式 xpp.setInput(is,"UTF-8"); //获取标签的类型 int eventType=xpp.getEventType(); while(eventType!=XmlPullParser.END_DOCUMENT){ switch (eventType){ //判断是否为文档开始 case XmlPullParser.START_DOCUMENT: //初始化list集合 books=new ArrayList<>(); break; case XmlPullParser.START_TAG: if(xpp.getName().equals("book")){//判断开始标签是否为book book=new Book(); eventType=xpp.next(); }else if(xpp.getName().equals("name")){ eventType=xpp.next();//让evenType指向name的下一个标签 book.setName(xpp.getText()); }else if(xpp.getName().equals("price")){ eventType=xpp.next(); book.setPrice(xpp.getText()); } break; //判断当前标签是否为文件结束标签 case XmlPullParser.END_TAG: if(xpp.getName().equals("book")){ books.add(book);//将book存入list集合 } break; } eventType=xpp.next(); } return books; } @Override public String serialize(List<Book> beauties) throws Exception { return null; }}
四、最后在Mainactivity中获取xml文件并调用解析方法
mlist=new ArrayList<>(); xml=new ParserXml(); try { mlist=xml.parse(is); mTextView.setText(mlist.toString()); } catch (Exception e) { e.printStackTrace(); }
0 0
- Xml解析之----Pull
- XML解析之PULL
- xml解析之pull
- XML之PULL解析
- XML之PULL解析
- xml解析之pull
- XML之pull解析
- xml解析之PULL
- Xml之pull解析
- xml之pull解析
- Xml之pull解析
- XML解析之pull
- XML解析之PULL
- Xml之Pull解析
- xml解析之pull解析
- xml解析之pull解析
- Xml 解析之pull解析
- XML解析之pull解析
- Odoo(OpenErp) 收藏夹(私藏)
- apache24安装和整合php
- 关于配置XML的异常分析-Mybatis配置文件
- USACO Combination Lock
- **C++** 刷题笔记三
- XML解析之Pull解析
- 从认知到编程(一)
- EasyUI 收藏夹(私藏)
- CryptAPI对称加密的例子
- tomcat配置教程
- SSDsim源码分析之initiation
- VGG-16 prototxt
- mac安装nginx
- 小程序入门(1)项目结构篇。