Android 使用XmlPullParser解析xml

这里我们假设要解析的xml文件名为:test.xml,我们将其放在assets路径中。

xml文件内容为:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<books>
    <book id="1">
        <name>Java编程思想</name>
        <price>29.9</price>
        <date>2013年11月11日</date>
    </book>
    <book id="2">
        <name>PHP和MySQL WEB开发</name>
        <price>49.9</price>
        <date>2009年10月01日</date>
    </book>
    <book id="3">
        <name>鸟哥的Linux私房菜</name>
        <price>60.0</price>
        <date>2010年05月30日</date>
    </book>
</books>

 

下面的代码演示了如何去解析一个xml文件(注意assets文件流的获取方式)

  private void pullXml() {
        InputStream inputStream = null;
        List<Book> bookList = null;
        Book book = null;
        try {
            //初始化parser
            AssetManager assetManager=this.getAssets();
            inputStream = assetManager.open("test.xml");
            XmlPullParser parser = Xml.newPullParser();
            parser.setInput(inputStream, "utf-8");

            //开始读取数据
            int type = parser.getEventType();
            while (type != XmlPullParser.END_DOCUMENT) {//1
                switch (type) {
                    case (XmlPullParser.START_TAG)://0
                        if ("books".equals(parser.getName())) {
                            bookList = new ArrayList<Book>();
                        } else if ("book".equals(parser.getName())) {
                            book = new Book();
                            //获取book的id
                            String id = parser.getAttributeValue(0);
                            book.setId(Integer.parseInt(id));
                        } else if ("name".equals(parser.getName())) {
                            book.setName(parser.nextText());
                        } else if ("price".equals(parser.getName())) {
                            book.setPrice(Double.parseDouble(parser.nextText()));
                        } else if ("date".equals(parser.getName())) {
                            book.setDate(parser.nextText());
                        }
                        break;
          
                    case (XmlPullParser.END_TAG)://3
                        if ("book".equals(parser.getName())) {
                            bookList.add(book);
                            book = null;
                        }
                        break;
                }
                type = parser.next();
            }
        } catch (Exception e) {
            Toast.makeText(this, "解析出错", Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }
        Toast.makeText(this, "长度"+bookList.size(), Toast.LENGTH_LONG).show();

        for (Book book1 : bookList) {
            Log.d("book", book1.toString());
        }
    }

 

posted @ 2013-11-11 23:25  无忧之路  阅读(974)  评论(0编辑  收藏  举报
无忧之路