`

XmlPullParser解析XML的例子

 
阅读更多

需要解析如下的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;
	}

 

分享到:
评论
1 楼 woxiangbo 2013-01-16  

ByteArrayInputStream bin = new ByteArrayInputStream(xml.getBytes());  

        InputStreamReader in = new InputStreamReader(bin);  

        KXmlParser parser = new KXmlParser();  

        parser.setInput(in);  

  

        int eventType = parser.getEventType();  

相关推荐

    android使用XmlPullParser来解析XML文件的一个例子

    为了高效地解析XML,Android提供了多种方式,其中XmlPullParser是一个非常重要的解析工具。本篇文章将详细探讨如何在Android中使用XmlPullParser来解析XML文件,并通过一个具体的WeiboTest示例进行说明。 首先,...

    android解析xml例子

    本示例将详细讲解Android中处理XML的三种主要方法:SAX(Simple API for XML)、DOM(Document Object Model)和PULL解析器。这些解析方式各有优缺点,适用于不同的场景。 1. SAX解析: SAX解析器是一种事件驱动的...

    Android编程创建与解析xml的常用方法详解

    本文将详细讲解Android中创建XML文件及使用DOM和XmlPullParser解析XML的方法。 首先,创建XML文件通常使用`XmlSerializer`类。下面是一个简单的示例: ```java // 创建XML文件 FileOutputStream fos = null; ...

    xml解析讲解例子

    在"XmlResTest"这个例子中,我们可以看到如何在Android应用中解析XML资源文件。通常,这些文件位于项目的`res`目录下,如`res/layout`(布局文件)、`res/values`(字符串、颜色、尺寸等资源文件)。 1. 布局文件...

    使用Android自带的XML解析器PULL解析器简单的解析xml

    PULL解析器通过事件驱动的方式,按需解析XML文档,降低了内存消耗,提高了性能。 首先,让我们了解一下PULL解析器的基本概念。PULL解析器的工作原理是基于事件的,它会生成一系列的解析事件,如开始文档、开始元素...

    android xml pull解析示例

    在Android系统中,XML Pull解析是一种轻量级且高效的解析XML文档的方法,它允许应用程序按需读取XML文档的节点,而无需加载整个文档到内存中。以下是关于Android XML Pull解析的详细知识讲解。 1. **XML Pull解析器...

    三种XML文件解析例子

    2. 使用`DocumentBuilder`解析XML文件,得到`Document`对象。 3. 遍历`Document`的节点,如`getElementsByTagName`获取指定标签的元素列表,`getTextContent`获取元素文本,`getAttributes`获取属性等。 4. 修改或...

    使用Pull解析器读取XML文件和生成XML文件

    Pull解析器是一种轻量级的解析方式,它允许程序在解析XML时按需获取数据,而不需要一次性加载整个文档到内存,从而提高了效率和资源利用率。 首先,我们来了解XML的基本结构。XML文件由一系列元素构成,每个元素由...

    xml PULL解析的一个小例子

    XML Pull解析器的工作方式是基于事件驱动的,它会读取XML文档并触发相应的事件(如开始标签、结束标签等),开发者通过监听这些事件来解析XML内容。这种方式比DOM解析更节省内存,因为它不需要将整个XML文档加载到...

    解析XML的程序,可以读取节点属性。

    - `XmlFile.cpp`:通常包含XML解析器的实现代码,包括读取文件、解析XML结构、提取属性等功能。 - `XmlFile.h`:头文件,可能包含了类定义和相关的函数声明,供其他源文件引用以调用XML解析功能。 6. **扩展性**...

    13pull解析xml天气信息

    以上就是"13pull解析xml天气信息"这个Android开发例子中所涵盖的关键技术点,涵盖了网络通信、XML解析、数据处理以及用户界面设计等多个核心领域。通过这个例子,开发者可以深入理解Android应用中数据获取和处理的...

    Android 生成和PULL解析xml

    本文将深入探讨如何在Android中生成XML文件以及如何使用PULL解析器来解析XML数据。 首先,我们来看一下如何在Android中生成XML文件。生成XML文件通常涉及创建一个XMLWriter对象,然后通过调用其方法来添加元素、...

    Android解析xml的Demo

    本Demo主要展示了如何在Android环境中解析XML文件,包括DOM(文档对象模型)、SAX(简单API for XML)和Pull Parser三种解析方式。通过学习这个Demo,开发者可以深入理解XML解析的基本原理和实践技巧。 1. DOM解析...

    SAX,PULL,DOM解析XML

    下面分别介绍这三个解析方式的一个例子: - SAX解析示例: ```java import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.Attributes; public class SaxExample extends DefaultHandler { @Override ...

    Android解析XML文件的三方法

    以下是一个使用Pull解析器解析XML文件的例子: ```java public class PullService { public static List&lt;Person&gt; readXML(InputStream inputStream) throws IOException { // 创建并配置Pull解析器 ...

    android中XML的创建与解析

    本教程将重点讲解如何在Android中创建XML文件以及使用DOM和XmlPullParser解析XML文件。以下是对这两个主题的详细说明。 首先,我们来看如何使用`XmlSerializer`创建XML文件。`XmlSerializer`是Android SDK中的一个...

    Android之PULL解析XML

    下面是一个简单的PULL解析XML的例子,假设我们有这样一个XML: ```xml ``` 我们可以这样解析它: ```java try { parser.setInput(is, null); // is 是输入流 String tagName; String title = ...

    android各种解析xml三种方式和json数据

    本篇文章将详细探讨XML的三种解析方法以及JSON数据的解析。这些知识点对于初学者理解Android应用的数据处理至关重要。 首先,让我们来看看XML的三种解析方式: 1. DOM解析(Document Object Model): DOM解析器会...

    Pull方法解析xml的demo以及学习

    在Android开发中,由于其轻量级和高效的特性,Pull解析器常被用来解析XML文档。本教程将深入讲解如何使用Pull方法解析XML,并通过一个实际的demo来展示其实现过程。 首先,理解Pull解析器的工作原理。Pull解析器是...

    Android解析xml文件的3种方式

    本篇文章将详细探讨Android解析XML的三种主要方式:DOM解析、SAX解析和Pull解析。 1. DOM解析(Document Object Model) DOM解析器将整个XML文件加载到内存中,形成一个树形结构,即DOM树。通过DOM解析,你可以轻松...

Global site tag (gtag.js) - Google Analytics