18.JAVA-pull解析XML
程序员文章站
2022-07-02 12:31:48
1.pull解析介绍 pull解析其实和我们上章学的sax解析原理非常类似,在Android中非常常用. 在java中,需自己获取xmlpull所依赖的类库分别为:kxml2-2.3.0.jar,xmlpull_1_1_3_4c.jar。 pull和sax区别 sax: 被动解析,一旦解析,则必须等 ......
1.pull解析介绍
pull解析其实和我们上章学的sax解析原理非常类似,在android中非常常用.
在java中,需自己获取xmlpull所依赖的类库分别为:kxml2-2.3.0.jar,xmlpull_1_1_3_4c.jar。
pull和sax区别
- sax: 被动解析,一旦解析,则必须等待解析完成,不能控制事件的处理主动结束。
- pull: 主动解析, 比sax会更加灵活,因此可以在满足了需要的条件后停止解析,不再获取事件.
2.pull解析步骤
- 获取xmlpullparser解析器,通过xmlpullparserfactory工厂类获取
- 通过xmlpullparser. setinput(new fileinputstream (),"utf-8")设置解析器的输入文件以及格式
- 然后通过xmlpullparser.geteventtype()一直while获取当前事件类型(文档开头/元素开头/内容/文档结束等).然后通过getname()等方法获取元素名、内容等,直到遇到end_document(文档结束)退出.
xmlpullparser中常用方法如下:
getname(); //获取当前元素名 gettextcharacters(); //获取当前内容(当geteventtype ()==text时通过这个来获取元素内容) nexttext(); //获取下个内容(当geteventtype ()==start_tag时通过这个来获取元素内容)
3.persons.xml示例如下
<?xml version="1.0" encoding="utf-8" standalone="no"?> <persons> <person> <姓名>张三</姓名> <性别>男</性别> <年龄>99</年龄> </person> <person> <姓名>李四</姓名> <性别>男</性别> <年龄>17</年龄> </person> </persons>
4.代码如下
@test public void pullparsexml() throws exception{ arraylist<person> list = null; person person = null; //1.获取xmlpullparser解析器,通过xmlpullparserfactory工厂类获取 xmlpullparserfactory xmlpullparserfactory = xmlpullparserfactory.newinstance(); xmlpullparser xmlpullparser = xmlpullparserfactory.newpullparser(); //2.设置解析器的输入文件以及格式 xmlpullparser.setinput(new fileinputstream(new file("src//persons.xml")),"utf-8"); //3.while获取当前事件类型.然后获取元素名、内容等,直到遇到end_document(文档结束)退出. int type = xmlpullparser.geteventtype(); while(type!=xmlpullparser.end_document) { if(type==xmlpullparser.start_tag) //开始元素 { if("persons".equals(xmlpullparser.getname())) { list = new arraylist<person>(); } else if("person".equals(xmlpullparser.getname())) { person = new person(); } else if("姓名".equals(xmlpullparser.getname())) { person.setname(xmlpullparser.nexttext()); } else if("性别".equals(xmlpullparser.getname())) { person.setsex(xmlpullparser.nexttext()); } else if("年龄".equals(xmlpullparser.getname())) { person.setage(xmlpullparser.nexttext()); } } else if(type==xmlpullparser.end_tag) //结束元素 { if("person".equals(xmlpullparser.getname())) { list.add(person); } } type = xmlpullparser.next(); } //打印: for(person person1:list){ system.out.println(person1); } }
打印:
上一篇: 各种排序(二)