用pull解释xml getName()是获取解析器当前指向的元素的名称那父元素用什么获取呀? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接上代码啦 LZ自己看下吧public static List<City> parseXml(String writeBack) throws Exception { byte[] bytes = writeBack.getBytes("UTF-8"); ByteArrayInputStream is = new ByteArrayInputStream(bytes); XmlPullParser parser = Xml.newPullParser(); parser.setInput(is, "utf-8"); int type = parser.getEventType(); int status = 0; List<City> cityList = null; String level = "0"; String parentId = "0"; while (type != XmlPullParser.END_DOCUMENT) { switch (type) { case XmlPullParser.START_DOCUMENT: City mCity; cityList = new ArrayList<City>(); break; case XmlPullParser.START_TAG: if (XmlConstants.RESULT.equals(parser.getName())) { // 状态 status = Integer.valueOf(parser.getAttributeValue(null, XmlConstants.STATUS)); } if (status == 1) { if (parser.getName().contains(AreaGetter.NATION)) { mCity = new City(); mCity.setCode(parser.getAttributeValue(null, AreaGetter.CODE)); mCity.setName(parser.getAttributeValue(null, AreaGetter.NAME)); mCity.setParentId(parentId); cityList.add(mCity); parentId = parser.getAttributeValue(null, AreaGetter.CODE); level = parentId; } if (parser.getName().contains(AreaGetter.PROVINCE)) { mCity = new City(); mCity.setCode(parser.getAttributeValue(null, AreaGetter.CODE)); mCity.setName(parser.getAttributeValue(null, AreaGetter.NAME)); mCity.setParentId(parentId); cityList.add(mCity); parentId = parser.getAttributeValue(null, AreaGetter.CODE); } if (parser.getName().contains(AreaGetter.CITY)) { mCity = new City(); mCity.setCode(parser.getAttributeValue(null, AreaGetter.CODE)); mCity.setName(parser.getAttributeValue(null, AreaGetter.NAME)); mCity.setParentId(parentId); cityList.add(mCity); } } break; case XmlPullParser.END_TAG: if(parser.getName().contains(AreaGetter.PROVINCE)){ parentId = level; } if (parser.getName().contains(AreaGetter.NATION)) { parentId = "0"; } break; } type = parser.next(); } is.close(); return cityList; } 使用 xmlpull解析不分是父节点和子节点,它只认识是不是节点,是不是属性 再补充一下,在android中解析XML有三种方式:sax,xmlpull,dom,常用的方法有前两种,因为它们节省内存空间。前面两种大致解析方法是通过事件方式解析,也就是逐个数据进行解析,它无法获取父节点或者说是前一节点的内容是什么,因为它的解析方式是逐个往前读,读完就不知道了。最后一种DOM解析是对象模型解析,也就是将XML的所有 数据存在内存中,所有 的数据在内存中有一个树型结构,有了树型结构就可以获取父节点和子节了。希望我的回答对你有帮助,谢谢! SQLite使用query方法取出某一列的值为最小的那一行 从安卓手机里面导出来的数据库文件不是实时的,有没有方法解决 sqlserver连接问题 android客户端使用socket连接本机进行通信 android零基础怎么学? ubuntu下安装ADT遇到如下问题,有图有真相 请问如何在设置VideoView的全屏播放和保持视频原尺寸播放 采用系统闹钟服务闹钟时间不准确的问题 android wifi开发无法删除某个ssid的问题 安卓数据定位 GestureDetector 的问题,各位帮忙看看 各类资源0分下载---第一期
byte[] bytes = writeBack.getBytes("UTF-8");
ByteArrayInputStream is = new ByteArrayInputStream(bytes);
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "utf-8");
int type = parser.getEventType();
int status = 0;
List<City> cityList = null;
String level = "0";
String parentId = "0";
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) { case XmlPullParser.START_DOCUMENT:
City mCity;
cityList = new ArrayList<City>();
break; case XmlPullParser.START_TAG:
if (XmlConstants.RESULT.equals(parser.getName())) {
// 状态
status = Integer.valueOf(parser.getAttributeValue(null, XmlConstants.STATUS));
}
if (status == 1) {
if (parser.getName().contains(AreaGetter.NATION)) {
mCity = new City();
mCity.setCode(parser.getAttributeValue(null, AreaGetter.CODE));
mCity.setName(parser.getAttributeValue(null, AreaGetter.NAME));
mCity.setParentId(parentId);
cityList.add(mCity);
parentId = parser.getAttributeValue(null, AreaGetter.CODE);
level = parentId;
}
if (parser.getName().contains(AreaGetter.PROVINCE)) {
mCity = new City();
mCity.setCode(parser.getAttributeValue(null, AreaGetter.CODE));
mCity.setName(parser.getAttributeValue(null, AreaGetter.NAME));
mCity.setParentId(parentId);
cityList.add(mCity);
parentId = parser.getAttributeValue(null, AreaGetter.CODE);
}
if (parser.getName().contains(AreaGetter.CITY)) {
mCity = new City();
mCity.setCode(parser.getAttributeValue(null, AreaGetter.CODE));
mCity.setName(parser.getAttributeValue(null, AreaGetter.NAME));
mCity.setParentId(parentId);
cityList.add(mCity);
}
}
break; case XmlPullParser.END_TAG:
if(parser.getName().contains(AreaGetter.PROVINCE)){
parentId = level;
}
if (parser.getName().contains(AreaGetter.NATION)) {
parentId = "0";
}
break;
}
type = parser.next();
}
is.close();
return cityList;
}