以下文章是从老罗教学中的总结,感谢老罗
Ø除了可以使用以上两种解析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(); } } }
相关推荐
在本主题"Android之PULL解析XML文件——新浪微博客户端首页效果"中,我们将深入探讨如何利用PULL解析器(PullParser)来处理XML数据,从而实现类似新浪微博客户端首页的动态效果。这种效果通常包括新闻标题、摘要、...
Android系统提供了一种轻量级的XML解析方式——PULL解析器(Pull Parser),它适用于处理大型XML文档,因为它不需要像DOM解析器那样一次性加载整个XML文档到内存中。PULL解析器通过事件驱动的方式,按需解析XML文档...
该文章详细介绍了在Android环境下如何使用SAX和PULL解析XML,包括代码示例和步骤说明,对于初学者来说非常有帮助。 最后,压缩包中的"Weather"文件很可能是示例的天气预报XML数据。通过实际解析这个文件,你可以更...
本项目主要关注的是XML的创建和使用Pull解析器来解析XML,这是Android系统中处理XML数据的一种高效方法。接下来,我们将详细讨论这两个知识点。 首先,XML(Extensible Markup Language)是一种用于标记数据的语言...
本资料包“安卓Android源码——比较通用的xml解析方法”将深入探讨在Android平台上解析XML的多种方法。 1. DOM解析器(Document Object Model) DOM解析器将整个XML文档加载到内存中,创建一个树形结构,便于遍历和...
本文将重点介绍SAX解析的一种实现方式——Pull解析。 Pull解析器(XMLPullParser)是Android SDK提供的一种轻量级、高效的XML解析方式,它不需要创建整个XML文档的树结构,而是通过事件触发的方式解析XML,从而节省...
最后,关于提供的图片资源`1-120Z4013F10-L.png`和文本文件`Android ReadXmlByPull 使用Pull解析Xml文件`可能包含示例代码或图解,它们可以帮助更好地理解XML Pull解析的过程。在实际开发中,结合这些辅助材料,可以...
本压缩包文件"安卓Android源码——比较通用的xml解析方法.zip"可能包含了一些关于如何在Android系统中解析XML的通用方法和技术。以下是关于Android XML解析的一些关键知识点: 1. **DOM解析**: - DOM(Document ...
本教程将深入探讨如何在Android系统中使用Pull解析器(Pull Parser)来读取和解析XML文件,以实现高效的数据处理。我们将通过分析"ReadXmlByPull"的源码来理解这一过程。 首先,让我们了解什么是Pull解析器。Pull...
总结来说,Android中解析XML时,DOM适用于小型且需要频繁访问的文件,SAX和Pull解析适合大型文件或资源有限的环境。选择哪种解析方式取决于具体应用场景和性能需求。理解并熟练掌握这三种解析方式,将有助于提升...
在Android开发中,XML文件广泛用于布局设计、配置...在实际项目中,还有一种基于SAX的拉式解析库——PULL解析器(Android提供的`XmlPullParser`),它在内存效率和灵活性之间找到了一个平衡点,也是常用的XML解析方法。
总结,Android解析XML的三种方法——SAX、DOM和PULL,各有适用场景。理解它们的工作原理和优缺点,可以帮助我们更好地选择和运用XML解析技术,提高应用的效率和用户体验。在实践中不断学习和探索,才能真正掌握这些...
除了DOM和SAX,Android还提供了另一种解析XML的方式——Pull解析器(PullParser),它是基于事件驱动的轻量级解析器,类似于SAX,但更易于使用。`android.util.Xml`提供了一个`PullParser`的实现。 示例代码: ```...
PullParser是Android提供的一种更高效的XML解析方式,它是基于事件的解析模型,但比SAX更简单易用。PullParser通过拉动(pulling)数据来解析XML,提供向前看的能力,可以在解析过程中跳过不关心的数据。 4. 示例...
3. Pull解析器:Android提供了一个基于SAX的轻量级解析器——Pull解析器。它允许开发者通过迭代的方式解析XML,无需等待整个文件加载完成,提高了效率。 二、Android中的XML解析库 1. Android自带的XmlPullParser...
另外,Android还提供了另一种解析方式——Pull解析,它是基于事件的,与SAX类似但更轻量级。使用`XMLPullParser`接口,应用程序通过调用`next()`方法来逐个处理事件,无需实现完整的事件处理器类。 1. **初始化Pull...
除了DOM和SAX,Android还提供了一个基于SAX的解析器——Pull解析器。Pull解析器是轻量级的,它允许开发者手动控制解析过程,通过调用`XmlPullParser`接口的方法来遍历XML文档。与SAX相比,Pull解析器更易于使用,...
Android还提供了一种更高效的解析方式——PullParser,它结合了DOM和SAX的优点。PullParser不将整个文件加载到内存,而是按需读取,同时提供向前和向后导航的能力。 ```java XmlPullParserFactory factory = ...