pull解析器

前言:Android中集成了pull解析器,所以从侧面凸显比较推荐使用pull解析器。以下演示了使用pull解析xml文件的过程,简单易懂,稍作修改就可以使用。

我将解析文件person.xml存放于assets目录下
解析XML内容:



    
        liming
        30
    
    
        zahngxiaoxiao
        25
    


作者:枫羽望空
链接:https://www.jianshu.com/p/066f60b76d41
來源:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

解析类PersonService类代码:

/**
 * Created by Administrator on 2016/12/2.
 */
public class PersonService {

    public static List getPersonXML (InputStream xml) throws Exception{
        List persons = null;
        Person person = null;
        //可通过pull解析器工场得到实例方法==》 XmlPullParserFactory.newInstance().newPullParser();
        XmlPullParser pullParser = Xml.newPullParser();//通Xml过帮助类获得pull解析器实例
        pullParser.setInput(xml,"UTF-8");//为pull解析器设置要解析的XML数据
        /**分析:
         * pull解析器会将数据读到一个 char[] = {-<..XML..>-}中
         * pull解析器会自动读取开始段(及第一段“”)类容,
         * 从而判断是否符合XML开始类容的某一个语法,并触发对应语法所对应的事件
         */
        int exent = pullParser.getEventType();//第一个事件及开始的事件
        while (exent != XmlPullParser.END_DOCUMENT){
            switch (exent){
                case XmlPullParser.START_DOCUMENT://DOCUMENT(开始事件)
                    persons = new ArrayList();
                    break;
                case XmlPullParser.START_TAG: //节点开始的TAG
                    if ("person".equals(pullParser.getName())){
                        int id = Integer.parseInt(pullParser.getAttributeValue(0));//获取id
                        person = new Person();
                        person.setId(id);
                    }
                    if ("name".equals(pullParser.getName())){ //获取name
                       String name = pullParser.nextText();
                        person.setName(name);
                    }
                    if ("age".equals(pullParser.getName())){ //获取age
                        int age = Integer.parseInt(pullParser.nextText());
                        person.setAge(age);
                    }
                    break;
                case XmlPullParser.END_TAG: //节点结束的TAG
                    if ("person".equals(pullParser.getName())){
                        persons.add(person);
                        person = null;
                    }
                    break;

            }
            //当解析完开始事件之后,PLL解析器不会主动向下解析,
            // 需要调用如下(.next())API,调用一次向下解析一步
            exent = pullParser.next();
        }
        return persons;
    }
}

作者:枫羽望空
链接:https://www.jianshu.com/p/066f60b76d41
來源:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

解析类容生成子类的person类代码:

/**
 * Created by Administrator on 2016/12/2.
 */
public class Person {

    private int id;
    private String name ;
    private int age;

    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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

作者:枫羽望空
链接:https://www.jianshu.com/p/066f60b76d41
來源:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Activity代码:

public class XMLParsePullActivity extends AppCompatActivity {

    TextView xml_parse_text ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        init();
        xmlParse();
    }

    private void init(){
        setContentView(R.layout.activity_xmlparse_pall);
        xml_parse_text = (TextView) findViewById(R.id.xml_parse_text);
    }

    private void xmlParse(){

        try {
            InputStream xml = this.getResources().getAssets().open("person.xml");// 获取assets下XM文件输出流
           List persons = PersonService.getPersonXML(xml);
            for (Person person : persons ){
                String text = xml_parse_text.getText()+" \n id:"+person.getId()+"\n name:"+person.getName()+"\nage:"+person.getAge();
                Log.d("FLY",text);
                xml_parse_text.setText(text);
            }
        } catch (Exception e) {
            Log.d("FLY","出错了"+e);
            e.printStackTrace();
        }
    }
}

作者:枫羽望空
链接:https://www.jianshu.com/p/066f60b76d41
來源:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

全文结束。

感谢:
Android XML文件解析之pull解析器

你可能感兴趣的:(pull解析器)