xml解析之pull
来源:互联网 发布:mac翻墙回国的软件 编辑:程序博客网 时间:2024/05/16 01:58
前几天看老罗视频的时候发现pull方式需要导入第三方的jar包,于是不了了之。后来想了想,既然pull比sax简单易用,而且google也推荐使用pull,那现在google现在是不是应该把pull的源代码整合到sdk里啊。进题啊试了下,果然不用导入第三方了!!!
OK,感觉pull确实比sax简单的多,不需要继承,只用一个方法就可以把解析的流程封装起来。下面是参考过官方文档之后的代码:
首先是PullHandler类:
package com.example.administrator.test.xml;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;public class PullHandler { //只有一个静态方法,所以这里可以省略 public void PullHandler() { } /** * @param inputStream 需要解析的流文件 * @param encode 编码格式,需要和xml文件里定义的一致 * @return * @throws XmlPullParserException * @throws IOException */ public static List<Person> parseXML(InputStream inputStream, String encode) throws XmlPullParserException, IOException { List<Person> list = null; //装载每一个解析的节点,SAX那里我用的是Map来装载的 Person person = new Person(-1, "null", "null", -1); //注意这里的实例化方式 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser pullParser = factory.newPullParser(); //这里也可以采用官方给出的方法,就是把xml转换成string再转换成reader pullParser.setInput(inputStream, encode); //获得事件的类型 int eventType = pullParser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_DOCUMENT) { System.out.println("Start document"); list = new ArrayList<>(); } else if (eventType == XmlPullParser.START_TAG) { if ("person".equals(pullParser.getName())) { System.out.println("Start tag " + pullParser.getName()); int id = Integer.parseInt(pullParser.getAttributeValue(0)); person.setId(id); String sex = pullParser.getAttributeValue(1); person.setSex(sex); } else if ("name".equals(pullParser.getName())) { System.out.println("Start tag " + pullParser.getName()); //注意这里是获取text,获取属性的话会报空指针,切记属性不在text里面 String name = pullParser.nextText(); person.setName(name); } else if ("age".equals(pullParser.getName())) { System.out.println("Start tag " + pullParser.getName()); //注意这里不是获取属性了,是获取Text int age = Integer.parseInt(pullParser.nextText()); person.setAge(age); } } else if (eventType == XmlPullParser.END_TAG) { //这里表示一个节点就结束了 System.out.println("End tag " + pullParser.getName()); if ("person".equals(pullParser.getName())) { list.add(person); person = new Person(-1, "null", "null", -1); } } else if (eventType == XmlPullParser.TEXT) { System.out.println("Text " + pullParser.getText()); } eventType = pullParser.next(); } return list; }}然后是单元测试里的代码:
public void testPull() { File file = new File(Environment.getExternalStorageDirectory(), "data.xml"); FileInputStream fileInputStream = null; List<Person> list = null; try { fileInputStream = new FileInputStream(file); list = PullHandler.parseXML(fileInputStream, "utf-8"); } catch (Exception e) { e.printStackTrace(); } finally { try { if (fileInputStream != null) fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (list != null) for (Person person : list) { System.out.println("person----------------------->" + person.toString()); } }
0 0
- Xml解析之----Pull
- XML解析之PULL
- xml解析之pull
- XML之PULL解析
- XML之PULL解析
- xml解析之pull
- XML之pull解析
- xml解析之PULL
- Xml之pull解析
- xml之pull解析
- Xml之pull解析
- XML解析之pull
- XML解析之PULL
- Xml之Pull解析
- xml解析之pull解析
- xml解析之pull解析
- Xml 解析之pull解析
- XML解析之pull解析
- MySql自动备份数据库, 数据库主(master)从(slave)配置
- 第11周-八边形Octagon类
- Lodop(V6.x)使用说明及样例
- 【转载】CSS3 常用四个动画(旋转、放大、旋转放大、移动)
- LCS算法的C++实现
- xml解析之pull
- 获得spring源码
- 如何用PHPExcel读取超大excel文件
- test
- ubuntu下安装eclipse不显示菜单栏
- Linux安装nginx
- UITabBarController简单介绍
- py2exe使用方法
- TS科普11 PES包句法解析