PULL解析XML
16lz
2021-01-23
XML:
<?xml version="1.0" encoding="UTF-8"?><persons><person id = "23"><name>张老师</name><age>21</age></person><person id = "20"><name>李老师</name><age>25</age></person></persons>
Person类:
package com.pull.domain;public class Person {private int id;private String name;private int age;public int getId() {return id;}public Person(int id, String name, int age) {super();this.id = id;this.name = name;this.age = age;}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;}public Person() {// TODO Auto-generated constructor stub}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";}}
PullXMLTools类:
package com.pull.parser;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import com.pull.domain.Person;/** * 主要是使用PULL解析xml * * @author jack * */public class PullXMLTools {public PullXMLTools() {// TODO Auto-generated constructor stub}/** * @param inputStream * 从服务器获取xml文件,以流的形式返回 * @param encode * 编码格式 * @return * @throws Exception */public static List<Person> parseXML(InputStream inputStream, String encode)throws Exception {List<Person> list = null;Person person = null;// 装载解析每一个person节点的内容// 创建一个xml解析的工厂XmlPullParserFactory factory = XmlPullParserFactory.newInstance();// 获得xml解析类的引用XmlPullParser parser = factory.newPullParser();parser.setInput(inputStream, encode);// 获得事件的类型int eventType = parser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {switch (eventType) {case XmlPullParser.START_DOCUMENT:list = new ArrayList<Person>();break;case XmlPullParser.START_TAG:if ("person".equals(parser.getName())) {person = new Person();// 取出属性值int id = Integer.parseInt(parser.getAttributeValue(0));person.setId(id);} else if ("name".equals(parser.getName())) {String name = parser.nextText();// 获取该节点的内容person.setName(name);} else if ("age".equals(parser.getName())) {int age = Integer.parseInt(parser.nextText());person.setAge(age);}break;case XmlPullParser.END_TAG:if ("person".equals(parser.getName())) {list.add(person);person = null;}break;}eventType = parser.next();}return list;}}
Test类:
package com.pull.test;import java.io.InputStream;import java.util.List;import com.pull.domain.Person;import com.pull.http.HttpUtils;import com.pull.parser.PullXMLTools;public class Test {public Test() {// TODO Auto-generated constructor stub}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString path = "http://192.168.1.125:8080/myhttp/person.xml";InputStream inputStream = HttpUtils.getXML(path);List<Person> list = null;try {list = PullXMLTools.parseXML(inputStream, "utf-8");for (Person person : list) {System.out.println(person.toString());}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}