安卓解析xml格式字符串

最近实验室的安卓app需要实现发内部邮件的功能。

说白了就是简单的数据库的增删处理。

但是中间的一部分有意思的就是获取收件人的列表的处理。

用户在登录APP的时候,如果验证成功,服务器则把数据的联系人的所有信息发送回来到客户端。

发送出来的格式是dataset,处理之后转换为xml格式的字符串发出来。

当发邮件的时候 ,则会在收件人提供一个Spinner控件,然后把所有人的名字显示出来。

这个时候就涉及到xml格式的字符串的解析。

我的实现方法很简单。用的是PULL方法。希望能够帮助到需要的同学。

首先看服务器端发回的字符串格式

<span style="font-size:18px;"><NewDataSet><ds><UserName>admin</UserName></ds><ds><UserName>王涵杨</UserName></ds><ds><UserName>陈鹏</UserName></ds><ds><UserName>谢永军</UserName></ds><ds><UserName>陈旻</UserName></ds><ds><UserName>姜川</UserName></ds><ds><UserName>刘渊</UserName></ds><ds><UserName>范玮</UserName></ds><ds><UserName>赵靖</UserName></ds><ds><UserName>黄大为</UserName></ds><ds><UserName>徐兰</UserName></ds><ds><UserName>赵金扎</UserName></ds><ds><UserName>宁云霞</UserName></ds><ds><UserName>贾慧</UserName></ds><ds><UserName>王瑞</UserName></ds><ds><UserName>李春艳</UserName></ds><ds><UserName>李婷</UserName></ds><ds><UserName>康健麒</UserName></ds><ds><UserName>折超颖</UserName></ds><ds><UserName>刘亮</UserName></ds><ds><UserName>庞晓芳</UserName></ds><ds><UserName>邬录</UserName></ds><ds><UserName>邬兆轩</UserName></ds><ds><UserName>石进</UserName></ds><ds><UserName>张振龙</UserName></ds><ds><UserName>王彦军</UserName></ds><ds><UserName>撖泽雨</UserName></ds><ds><UserName>杨杰</UserName></ds><ds><UserName>杜丹</UserName></ds><ds><UserName>赵小燕</UserName></ds><ds><UserName>赵慧</UserName></ds><ds><UserName>鲁星宇</UserName></ds><ds><UserName>田宝凤</UserName></ds><ds><UserName>王玲</UserName></ds><ds><UserName>刘轶群</UserName></ds><ds><UserName>贺艳</UserName></ds><ds><UserName>温晔</UserName></ds><ds><UserName>侯丽枝</UserName></ds><ds><UserName>刘源</UserName></ds><ds><UserName>王庆伟</UserName></ds><ds><UserName>王旭</UserName></ds><ds><UserName>洪雪松</UserName></ds><ds><UserName>张巧平</UserName></ds><ds><UserName>李瑞霞</UserName></ds><ds><UserName>李倩</UserName></ds></NewDataSet></span>

就是数据库中所有人的姓名。

然后客户端接受到这个字符串。同时写入到SharedPreferences中保存。

在发邮件的时候,读取SharedPreferences的姓名,并转换。

读取姓名:

<span style="font-size:18px;">private SharedPreferences info;
private String peoInfo;
</span>
<span style="font-size:18px;">info = getSharedPreferences("info", 0);
peoInfo = info.getString("info","");</span>
<span style="font-size:18px;">ByteArrayInputStream tInputStringStream = new ByteArrayInputStream(peoInfo.getBytes());<span style="white-space:pre">	</span>//转为流
</span>

xml字符串处理,首先声明一个接口InfoParse.java:

<span style="font-size:18px;">public interface InfoParse {

	public ArrayList<String> parse(InputStream is) throws Exception;

}</span>

返回ArrayList;

接着实现接口PullInfo.java:

<span style="font-size:18px;">public class PullInfo implements InfoParse {
	ArrayList<String> info = new ArrayList<String>() ;
	String temp =null;
	@Override
	public ArrayList<String> parse(InputStream is)throws Exception {
		// TODO 自动生成的方法存根

	XmlPullParser parser = Xml.newPullParser(); //由android.util.Xml创建一个XmlPullParser实例
        parser.setInput(is, "UTF-8");
        int eventType = parser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT)
        {
        	 switch (eventType) {
        	 case XmlPullParser.START_DOCUMENT:
        		 temp = null;
        		 break;
        	 case XmlPullParser.START_TAG:
                 if (parser.getName().equals("UserName")) {
                     eventType = parser.next();
                     temp = parser.getText();
                 }
                 break;
        	 case XmlPullParser.END_TAG:
                 if (parser.getName().equals("ds")) {
                	 info.add(temp);
                 }
                 break;
        	 }
        	 eventType = parser.next();
        }
<span style="white-space:pre">	</span>return info;
<span style="white-space:pre">	</span>}</span>
<span style="font-size:18px;">}</span>

因为有字符串看出来,只有ds一个标签里的内容需要识别。至于其他的标签,请自行添加判断条件。

最后在发邮件的里面写上

<span style="white-space:pre"><span style="font-size:18px;">	InfoParse parser = null;
</span></span>
<pre name="code" class="java"><span><span style="font-size:18px;">	ArrayList<String> peoName  = new ArrayList<String>();</span></span>

String drp[];


<span style="font-size:18px;"><span style="white-space:pre">	</span>try {
			parser = new PullInfo();
			peoName =  parser.parse(tInputStringStream);
			int size = peoName.size();
			drp = new String[size];
			for(int i = 0 ;i < size ; i ++)
			{
				drp[i] = (String)peoName.get(i);
			}
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}</span>

这样解析之后,都存在字符串数组drp中。

至于绑定,可以参考如下

private Spinner type;
private ArrayAdapter<String> adapter;

type = (Spinner)findViewById(R.id.type);
        type.setPadding(15,0,0,0);
        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,drp);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        type.setAdapter(adapter);
type.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> arg0, View arg1,
					int arg2, long arg3) {
				// TODO 自动生成的方法存根
				ToUser = drp[arg2];
			}

			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				// TODO 自动生成的方法存根

			}
        });

效果如下图。

吐槽一句:自学安卓不到1个月的大三狗,没有美工,只有一人做安卓APP、

o(︶︿︶)o 唉~  将就看吧~

时间: 2024-08-25 18:13:20

安卓解析xml格式字符串的相关文章

【python小随笔】python解析xml格式字符串与xml文件

1:解析xml---文件 from xml.dom.minidom import parse import xml.dom.minidom # 使用minidom解析器打开XML文档 DOMTree = xml.dom.minidom.parse("./test.xml") print(DOMTree) collection = DOMTree.documentElement # 集合某个标签 VariationChilds = collection.getElementsByTagN

自个倒腾的解析XML格式字符串的类【具备一定的通用性】

在公司写了很多解析xml字符串的代码,之前都是不同的结构都是写一段这个结构的DOM操作的代码来获取数据.写了几十个,每个几十行代码,又烦! 一直想写一个比较通用一点的类,这几天有了一点想法,直接上代码了!没有考虑兼容性,也没有在项目中使用,就当作工作总结了,欢迎大家提意见. <!DOCTYPE HTML> <head> <meta charset="utf-8"> <title>适用的xml字符串解析</title> <

XStream解析xml格式的字符串的方法

ProcessStatusUploadRootList processStatusUploadRootList = null; try { XStream xStream = new XStream(); xStream.alias("Root", ProcessStatusUploadRootList.class); xStream.alias("Header", ProcessStatusUploadHeader.class); xStream.alias(&q

C# 将XML格式字符串,写入数据集的表中 XML解析

将XML格式字符串,写入数据集的表1中 命名空间:using System.Xml; string strRead;//strRead为以下xml值 XmlDocument xd = new XmlDocument(); xd.LoadXml(strRead); XmlNodeList nodeList = xd.SelectSingleNode("root").ChildNodes;//获取bookstore节点的所有子节点 foreach (XmlNode xn in nodeLi

iOS开发之解析XML格式数据

XML格式的数据是一种数据的传输格式.因为它方便编写.结构清晰,所以深受程序猿的喜爱,非常多人都喜欢使用XML格式数据传输或者作为程序的配置信息. 如今我将来实如今iOS中解析XML格式数据,语言使用Swift. 首先自己写一个简单的XML: <data> <person age="15">zhangsan</person> <person age="2">lisi</person> <person&

Android之解析XML格式数据

作用:在网络上传输数据时最常用的格式有两种,XML 和 JSON.解析XML格式数据获得与后台交互的信息. 种类: 3种:Pull 解析方式:SAX 解析方式:DOM解析方式. 1.使用Pull解析器解析XML文档Pull解析器的运行方式和SAX解析器很相似,它提供了类似的事件,比如文档开始.文档结束.开始元素和结束元素等.使用parser.next()方法可以进入下一个元素并触发相应的事件.各种事件均已数字的形式被发送,因此可以在程序中使用一个switch语句来对事件进行选择,然后进行相应的事

PHP解析XML格式文档

<?php// 首先要建一个DOMDocument对象$xml = new DOMDocument();// 加载Xml文件$xml->load("3.xml");// 获取所有的post标签$postDom = $xml->getElementsByTagName("PROPERTIES");print_r($postDom);echo '<br>';// 循环遍历post标签    foreach($postDom as $post

使用第三方DOM解析XML格式文件

在解析XML格式文件的时候,使用SAX解析需要实现好多代理方法,比较难记,也容易出错,现在介绍一种由Google推出的第三方DOM(Document Object Model)来解析XML文件. 首先将该第三方文件拖到工程中.谷歌下载地址:https://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/XMLSupport/ (注:由于该三方是很久之前的版本,还是基于MRC格式下的代码,所以需要改成ARC兼

SQL 里解析 XML 格式 字段 信息

DECLARE @ItemMessage XML DECLARE @ItemTable TABLE(No NVARCHAR(300),zje NVARCHAR(300),yfje NVARCHAR(300),bcje NVARCHAR(300),URL NVARCHAR(300),Remark NVARCHAR(300)) SET @ItemMessage=N'<List> <item> <No>SM-JG-201303-0189</No> <zje&