android解析XML文件啊

我用pullparser解析器解析XML文件时,出现这样错误,本来按正常的来话在这个文件中月份是不同的,分别是201201,201202,201203,201204.但我解析出来的时候,全部都是201204,XML文件如下:<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<PersonInfoCache>
<person>
<pension>785.6</pension>
<basemonth>201201</basemonth>
<fund>198.4</fund>
<medical>196.4</medical>
</person>
<person>
<pension>785.6</pension>
<basemonth>201202</basemonth>
<fund>198.4</fund>
<medical>196.4</medical>
</person>
<person>
<pension>785.6</pension>
<basemonth>201203</basemonth>
<fund>198.4</fund>
<medical>196.4</medical>
</person>
<person>
<pension>785.6</pension>
<basemonth>201204</basemonth>
<fund>198.4</fund>
<medical>196.4</medical>
</person>
</PersonInfoCache>
解析代码如下:
public static List<Map<String, Object>> getPersons(InputStream xml) throws Exception{
List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
Map<String,Object> map=new HashMap<String,Object>();
XmlPullParser pullParser=Xml.newPullParser();
pullParser.setInput(xml, "UTF-8");
int event=pullParser.getEventType();
while(event!=XmlPullParser.END_DOCUMENT){
switch (event) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
if("pension".equalsIgnoreCase(pullParser.getName())){
map.put("pension", pullParser.nextText());

}
else if("basemonth".equalsIgnoreCase(pullParser.getName())){
map.put("basemonth", pullParser.nextText());
// SharedPreferences preferences=getSharedPreferences("itcase",);
// Editor editor=preferences.edit();
//System.out.println( pullParser.nextText());
}
else if("fund".equalsIgnoreCase(pullParser.getName())){
map.put("fund", pullParser.nextText());
}
else if("medical".equalsIgnoreCase(pullParser.getName())){
map.put("medical", pullParser.nextText());
}
break;
case XmlPullParser.END_TAG:
if("person".equals(pullParser.getName())){
list.add(map);
}
break;
}
event=pullParser.next();
}
return list;
}
解析裁图如下:,求高手帮忙帮我改改代码,为什么总是解析只是得出201204,为什么之前的201201,201202,201203,都没有。而且得到的也是4个201204呢?求啊,我做这个快做疯了

呵呵 因为Map<String,Object> map=new HashMap<String,Object>(); 这个对象你只new过一次,所以list.add(map) 其实是一直list在add同一个对象,看你的XML,他会add这个map四次,为什么值会是最后一次呢,因为这个map在你循环的时候一直在改变,当你读完最后一个标签的时候,他就会结束,也就是说你add了同样的一个map四次,这个map只会出来201204。修改方法很简单,如下:
case XmlPullParser.END_TAG:
if("person".equals(pullParser.getName())){
list.add(map);
map=new HashMap<String,Object>(); //很重要
}
break;
}
这样应该获得就是四个map了,你也能获得所有解析后的信息了。
温馨提示:内容为网友见解,仅供参考
无其他回答

android中怎么解析复杂的xml文件
当然android的事件机制是基于回调方法的,在用SAX解析xml文档时候,在读取到文档开始和结束标签时候就会回调一个事件,在读取到其他节点与内容时候也会回调一个事件。在SAX接口中,事件源是org.xml.sax包中的XMLReader,它通过parser()方法来解析XML文档,并产生事件。事件处理器是org.xml.sax包中ContentHander、DTDHander、...

Android逆向笔记 —— AndroidManifest.xml 文件格式解析
解析清单文件的步骤通常包括:使用010 editor打开文件,分析基本结构,识别并解析主要组成部分,如头部、字符串池、资源ID块、XML内容块等。理解这些部分的结构对于准确解析清单文件至关重要。例如,头部包含了魔数和文件大小,字符串池存储了清单文件中的所有字符串信息,资源ID块记录了系统属性的资源ID值,X...

android解析XML<string xmlns="http:\/\/WebXml.com.cn\/">string<\/string...
。。

android开发从后台获取xml数据怎么解析
1 创建SAXParserFactory对象 2 根据SAXParserFactory.newSAXParser()方法返回一个SAXParser解析器 3 根据SAXParser解析器获取事件源对象XMLReader 4 实例化一个DefaultHandler对象 5 连接事件源对象XMLReader到事件处理类DefaultHandler中 6 调用XMLReader的parse方法从输入源中获取到的xml数据 7 通过DefaultHa...

android中用xmlpullparser解析xml文件,以及res\/raw和assets的不同_百度...
1) 大括号开始结束{}2) 内容部分每条数据以“,”分隔3) 每条数据由键值对构成,key必须是字符串“”4) 值可以是:String、double、int、long、boolean、 jsonObject、jsonArray把要解析的XML文件放在assets目录下,这里解释下res\/raw和assets的相同点: 两者目录下的文件在打包后会原封不动的保...

Android将这xml文件用sax方式解析怎么弄
在Android中解析XML文主要有三种方式,分别为Simple API for XML(SAX)、Document Object Model(DOM)和Android附带的PULL解析器。其中SAX是一个解析速度非常快并且占用内存少的XML解析器,非常适合Android手机等移动设备。 SAX解析XML文件采用事件驱动的方式进行,也就是说,SAX是逐行扫描文件,遇到符合条件的设定条件后就会触...

android中xml解析pull与sax有什么区别
1、SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于android等移动设备,SAX全称是Simple API for Xml,既是指一种接口,也是一个软件包,作为接口,sax是事件驱动型xml解析的一个标准接口。具有如下特点1. 解析效率高,占用内存少。2.可以随时停止解析。3.不能载入整个文档到内存。4.不能...

Android将PPT格式的XML数据解析,并实现演示
一。使用simple-xml库解析PPT格式的XML数据 在Android应用中,可以通过引入第三方库simple-xml来解析XML数据。simple-xml库是一款轻量级的XML与Java对象之间转换的工具包,其官方网站为http:\/\/simple.sourceforge.net\/。开发者可以从官网上下载最新版本的jar包,本文示例使用的是版本2.7.1。代码示例是证明...

在android中怎么使用pullparse解析.xml文件
import android.util.Xml;import com.andyidea.entity.Student;public class ParserByPULL { \/\/采用XmlPullParser来解析XML文件 public static List<Student> getStudents(InputStream inStream) throws Throwable { List<Student> students = null;Student mStudent = null;\/\/===创建XmlPullParser,有两种...

android开发xml解析问题
看你 解析多还是少啦 如果你的XML文档包含文档数据(例如, Framemaker documents stored in XML format), 那么DOM就是你的解决方案的最自然选择。如果你要创建一些类似于文档信息管理的系统,那么你不得不处理大量的文档数据。Datachannel RIO 产品就是这么一个例子,它可以索引和组织各种类型文档资源中的...

相似回答