XmlPullParser解析xml文件

现在介绍我们的Pull解析的使用,知识点,理解以及它的缺点和优点

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());
    }
}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值