以下文章是从老罗教学中的总结,感谢老罗
Ø除了可以使用以上两种解析XML文件之外,我们也可以使用Java自带的PULL来解析XML文件。
ØPULL解析器的运行方式和sax解析器很相似,它提供了类似的事件。
Ø如开始元素和结束元素,使用parser.next()可以进行下一个元素并且触发相应的事件,事件将作为代码被
发送,因此可以使用一个switch来对事件进行选择,然后进行相应的处理。当开始解析元素时候,调
用parser.nextText()方法可以获得下一个Text类型的元素。
需要解析的XML
<?xml version="1.0" encoding="UTF-8"?> <persons> <person id="1"> <name>张三</name> <age>20</age> </person> <person id="2"> <name>李四</name> <age>24</age> </person> </persons>
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 } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
package com.pull.http; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class HttpUtils { /** * 从服务器获得xml文件返回流 * * @param path * @return */ public static InputStream getXML(String path) { InputStream inputStream = null; try { URL url = new URL(path); if (url != null) { HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setConnectTimeout(3000); connection.setDoInput(true); connection.setRequestMethod("GET"); int code = connection.getResponseCode(); if (code == 200) { inputStream = connection.getInputStream(); } } } catch (Exception e) { // TODO: handle exception } return inputStream; } }
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; } }
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 stub String path = "http://192.168.0.102: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 block e.printStackTrace(); } } }
相关推荐
这是一个完整的eclipse项目,直接打开就可以看到整个项目完整的代码,而且有单元测试代码
安卓的PULL解析XMl文件,实现了新浪微博的新闻效果~
Android源码——ReadXmlByPull 使用Pull解析Xml文件.zip
安卓Android源码——ReadXmlByPull使用Pull解析Xml文件.zip
Android系统中和创建XML相关的包为org.xmlpull.v1,在这个包中不仅提供了用于创建XML的 XmlSerializer,还提供了用来解析XML的Pull方式解析器 XmlPullParser XmlSerializer没有像XmlPullParser那样提取XML事件,而是...
Android 程序技术 本节课程内容:习题详情显示 XML概述 XML概述 Summary of XML ...Android中已经集成了PULL解析器。 PULL解析 XML解析 XML parsing XmlPullParser.START_DOCUMENT:XML文档的开始,如<?xml
Android进阶初级:组件Widget/ 菜单Menu/ 布局Layout 详解 Xml解析(Pull/Dom/Sax)/JNI 解析SQL数据库原理, SQLit e /SharedPreferences/File详解 多媒体Audio/Video/Camera 详解 Android进阶高级:蓝牙/WIFI SMS/...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
12.1.3 PULL 12.2 JSON格式 12.2.1 基本类型 12.2.2 数组和集合 12.2.3 类对象 12.3 JSON解析 12.4 Gson 12.4.1 简单对象类型转换 12.4.2 数组和集合类型转换 12.5 xStream 12.6 本章小结 第四篇 Android应用开发...
|--xml文件的pull解析与序列化写入 |--xml的封装序列化 |--任务循环之只在Activity显示时执行 |--修改文件的最后修改时间 |--偏好设置(回显) |--内存优化之各种方法 |--内容提供者之短信的序列化对象读写 |--内容...
ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。 注:有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。 基本用法 命令语法 ...