• 使用pull方式解析xml文件示例:


    网上的示例太多,基本类似,个人在此做个简单的总结:

    1、首先在工程的asserts目录下建一个book.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <books>
        <book id="1">
            <name>thinking in java</name>
            <price>85.5</price>
        </book>
        <book id="2">
            <name>Spring in Action</name>
            <price>39.0</price>
        </book>
    </books>
    View Code

    2、创建Book.java类

    /**
     * 
     */
    package com.hyzhou.pulldemo;
    
    /**
     * @author hyzhou
     * 
     *         2013-10-17
     */
    public class Book {
    
        private int id;
        private String name;
        private float price;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public float getPrice() {
            return price;
        }
    
        public void setPrice(float price) {
            this.price = price;
        }
    
        @Override
        public String toString() {
            return this.id + ":" + this.name + ":" + this.price;
        }
    
    
    }
    View Code

    3、创建PullParse.java类

    /**
     * 
     */
    package com.hyzhou.pulldemo;
    
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.xmlpull.v1.XmlPullParser;
    
    
    import android.util.Xml;
    /**
     * @author hyzhou
     *
     * 2013-10-17
     */
    public class PullParse {
    
        public static List<Book> getBooks(InputStream inputStream) throws Exception
        {
            XmlPullParser parser=Xml.newPullParser();
            List<Book> books=null;
            Book book=null;
            parser.setInput(inputStream, "UTF-8");//以流的形式将xml文件载入
            
            int event=parser.getEventType();//产生第一个事件
            
            while (event != XmlPullParser.END_DOCUMENT) {
                switch (event) {
                case XmlPullParser.START_DOCUMENT://判断当前事件是否是文档开始事件 
                    books=new ArrayList<Book>();//初始化books集合
                    break;
                case XmlPullParser.START_TAG: //判断当前事件是否是标签元素开始事件  
                    if ("book".equals(parser.getName())) {//判断开始标签元素是否是book   
                        book = new Book();
                        book.setId(Integer.parseInt(parser.getAttributeValue(0)));//得到book标签的属性值,并设置book的id   
    
                    }
                    else if ("name".equals(parser.getName())) {
                        book.setName(parser.nextText());
                    }
                    else if ("price".equals(parser.getName())) {
                        book.setPrice(Float.parseFloat(parser.nextText()));
                    }
                    /**
                    if (book!=null) {
                        
                        if("name".equals(parser.getName())) //判断开始标签元素是否是name   
                        {    //判断开始标签元素是否是name
                            book.setName(parser.nextText());
                        }else if("price".equals(parser.getName())){//判断开始标签元素是否是price
                            book.setPrice(Float.parseFloat(parser.nextText()));
                        }
                    }
                    **/
                    break;                
                case XmlPullParser.END_TAG:
                     if("book".equals(parser.getName())){//判断结束标签元素是否是book
                            books.add(book);//将book添加到books集合
                            book = null;
                        }
                     break;
                }
                
                 event=parser.next();//进入下一个元素并触发相应事件   
            }
            return books;        
        }
    }
    View Code

    4、编写MainActivity.java类

    package com.hyzhou.pulldemo;
    
    import java.io.InputStream;
    import java.util.List;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        private TextView tView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tView = (TextView) findViewById(R.id.tv);
            try {
                //用类加载器加载xml文件,book.xml放在了assets文件下
                InputStream inputStream=getResources().getAssets().open("book.xml");
                List<Book> books = PullParse.getBooks(inputStream);
    
                StringBuffer sb = new StringBuffer();
    
                for (Book book : books) {
                    String str = book.toString();
                    sb.append(str);
                    sb.append("
    ");
                }
                tView.setText(sb.toString());
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
                Toast.makeText(this, "解析失败", Toast.LENGTH_LONG).show();
            }
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.activity_main, menu);
            return true;
        }
    
    }
    View Code

    源码下载地址

  • 相关阅读:
    crawlspider的源码学习
    df 参数说明
    Linux top 命令各参数详解
    Redis info参数总结
    python 读写 Excel文件
    python之Selenium库的使用
    heapq模块
    Python数据库连接池DButils
    【leetcode】701. Insert into a Binary Search Tree
    【leetcode】940. Distinct Subsequences II
  • 原文地址:https://www.cnblogs.com/hyzhou/p/3376072.html
Copyright © 2020-2023  润新知