需要解析如下的XML:
<iq id="EHS8g-5" to="123" from="456" type="set"> <command xmlns="http://jabber.org/protocol/commands" node="send-sms" action="execute"> <property name="message"> <message id="EHS8g-4" from="123" type="chat"> <body>hello world</body> </message> </property> <property name="targets"> <list> <value>15615627018</value> <value>12990792706</value> <value>14293115658</value> <value>12969840178</value> </list> </property> </command> </iq>
public IQ parseIQ(XmlPullParser parser) throws Exception { SendSmsIQ smsIQ = new SendSmsIQ(); // parse node attr value smsIQ.setNode((parser.getAttributeValue("", "node"))); boolean done = false; while (!done) { int eventType = parser.next(); if (eventType == XmlPullParser.START_TAG) { if (parser.getName().equals("property")) { if (parser.getAttributeValue("", "name").equals("message")) { // parse property->message smsIQ.setMessage(parseMessage(parser)); } else if (parser.getAttributeValue("", "name").equals("targets")) { // parse property->targets smsIQ.setTargetList(parseList(parser)); } } } if (eventType == XmlPullParser.END_TAG) { if (parser.getName().equals("command")) { done = true; } } } System.out.println("smsIQ.toXML(): " + smsIQ.toXML()); return smsIQ; } private Message parseMessage(XmlPullParser parser) throws Exception { Message message = new Message(); boolean done = false; while (!done) { int eventType = parser.next(); if (eventType == XmlPullParser.START_TAG) { if (parser.getName().equals("message")) { message.setPacketID(parser.getAttributeValue("", "id")); message.setFrom(parser.getAttributeValue("", "from")); message.setType(Type.valueOf(parser.getAttributeValue("", "type"))); message.setBody(parseBody(parser)); } } if (eventType == XmlPullParser.END_TAG) { if (parser.getName().equals("message")) { done = true; } } } System.out.println("Message:" + message.toXML()); return message; } private String parseBody(XmlPullParser parser) throws Exception { String body = ""; boolean done = false; while (!done) { int eventType = parser.next(); if (eventType == XmlPullParser.START_TAG) { } else if (eventType == XmlPullParser.TEXT) { body = parser.getText(); } else if (eventType == XmlPullParser.END_TAG) { if (parser.getName().equals("body")) { done = true; } } } return body; } private List<String> parseList(XmlPullParser parser) throws Exception { List<String> list = null; boolean done = false; while (!done) { int eventType = parser.next(); if (eventType == XmlPullParser.START_TAG) { if (parser.getName().equals("list")) { list = parseValue(parser); } } else if (eventType == XmlPullParser.END_TAG) { String name = parser.getName(); if (name.equals("property")) {//parseValue(parser) 需要</list>来终止,所以这里要用property来终止 done = true; } } } return list; } private List<String> parseValue(XmlPullParser parser) throws Exception { List<String> list = new ArrayList<String>(); boolean done = false; while (!done) { int eventType = parser.next(); if (eventType == XmlPullParser.START_TAG) { } else if (eventType == XmlPullParser.TEXT) { String value = parser.getText(); System.out.println(value); list.add(value); } else if (eventType == XmlPullParser.END_TAG) { if(!parser.getName().equals("value")){//当解析到list的时候结束,否则不结束,一致循环解析value done = true; } System.out.println("=======end:"+parser.getName()); } } return list; }
相关推荐
为了高效地解析XML,Android提供了多种方式,其中XmlPullParser是一个非常重要的解析工具。本篇文章将详细探讨如何在Android中使用XmlPullParser来解析XML文件,并通过一个具体的WeiboTest示例进行说明。 首先,...
本示例将详细讲解Android中处理XML的三种主要方法:SAX(Simple API for XML)、DOM(Document Object Model)和PULL解析器。这些解析方式各有优缺点,适用于不同的场景。 1. SAX解析: SAX解析器是一种事件驱动的...
本文将详细讲解Android中创建XML文件及使用DOM和XmlPullParser解析XML的方法。 首先,创建XML文件通常使用`XmlSerializer`类。下面是一个简单的示例: ```java // 创建XML文件 FileOutputStream fos = null; ...
在"XmlResTest"这个例子中,我们可以看到如何在Android应用中解析XML资源文件。通常,这些文件位于项目的`res`目录下,如`res/layout`(布局文件)、`res/values`(字符串、颜色、尺寸等资源文件)。 1. 布局文件...
PULL解析器通过事件驱动的方式,按需解析XML文档,降低了内存消耗,提高了性能。 首先,让我们了解一下PULL解析器的基本概念。PULL解析器的工作原理是基于事件的,它会生成一系列的解析事件,如开始文档、开始元素...
在Android系统中,XML Pull解析是一种轻量级且高效的解析XML文档的方法,它允许应用程序按需读取XML文档的节点,而无需加载整个文档到内存中。以下是关于Android XML Pull解析的详细知识讲解。 1. **XML Pull解析器...
2. 使用`DocumentBuilder`解析XML文件,得到`Document`对象。 3. 遍历`Document`的节点,如`getElementsByTagName`获取指定标签的元素列表,`getTextContent`获取元素文本,`getAttributes`获取属性等。 4. 修改或...
Pull解析器是一种轻量级的解析方式,它允许程序在解析XML时按需获取数据,而不需要一次性加载整个文档到内存,从而提高了效率和资源利用率。 首先,我们来了解XML的基本结构。XML文件由一系列元素构成,每个元素由...
XML Pull解析器的工作方式是基于事件驱动的,它会读取XML文档并触发相应的事件(如开始标签、结束标签等),开发者通过监听这些事件来解析XML内容。这种方式比DOM解析更节省内存,因为它不需要将整个XML文档加载到...
- `XmlFile.cpp`:通常包含XML解析器的实现代码,包括读取文件、解析XML结构、提取属性等功能。 - `XmlFile.h`:头文件,可能包含了类定义和相关的函数声明,供其他源文件引用以调用XML解析功能。 6. **扩展性**...
以上就是"13pull解析xml天气信息"这个Android开发例子中所涵盖的关键技术点,涵盖了网络通信、XML解析、数据处理以及用户界面设计等多个核心领域。通过这个例子,开发者可以深入理解Android应用中数据获取和处理的...
本文将深入探讨如何在Android中生成XML文件以及如何使用PULL解析器来解析XML数据。 首先,我们来看一下如何在Android中生成XML文件。生成XML文件通常涉及创建一个XMLWriter对象,然后通过调用其方法来添加元素、...
本Demo主要展示了如何在Android环境中解析XML文件,包括DOM(文档对象模型)、SAX(简单API for XML)和Pull Parser三种解析方式。通过学习这个Demo,开发者可以深入理解XML解析的基本原理和实践技巧。 1. DOM解析...
下面分别介绍这三个解析方式的一个例子: - SAX解析示例: ```java import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.Attributes; public class SaxExample extends DefaultHandler { @Override ...
以下是一个使用Pull解析器解析XML文件的例子: ```java public class PullService { public static List<Person> readXML(InputStream inputStream) throws IOException { // 创建并配置Pull解析器 ...
本教程将重点讲解如何在Android中创建XML文件以及使用DOM和XmlPullParser解析XML文件。以下是对这两个主题的详细说明。 首先,我们来看如何使用`XmlSerializer`创建XML文件。`XmlSerializer`是Android SDK中的一个...
下面是一个简单的PULL解析XML的例子,假设我们有这样一个XML: ```xml ``` 我们可以这样解析它: ```java try { parser.setInput(is, null); // is 是输入流 String tagName; String title = ...
本篇文章将详细探讨XML的三种解析方法以及JSON数据的解析。这些知识点对于初学者理解Android应用的数据处理至关重要。 首先,让我们来看看XML的三种解析方式: 1. DOM解析(Document Object Model): DOM解析器会...
在Android开发中,由于其轻量级和高效的特性,Pull解析器常被用来解析XML文档。本教程将深入讲解如何使用Pull方法解析XML,并通过一个实际的demo来展示其实现过程。 首先,理解Pull解析器的工作原理。Pull解析器是...
本篇文章将详细探讨Android解析XML的三种主要方式:DOM解析、SAX解析和Pull解析。 1. DOM解析(Document Object Model) DOM解析器将整个XML文件加载到内存中,形成一个树形结构,即DOM树。通过DOM解析,你可以轻松...