使用pull解析xml文件,为何结束标签读不到?

有心好书
博客专家认证
2015-04-18 07:36:11
<?xml version="1.0" encoding="UTF-8"?>
<!--
START_DOCUMET:第一个节点 END_DOCUMET:尾节点 START_TAG:其他的首部的节点 p pn c cn...
END_TAG:其他的尾部的节点 </p> </c> ...
-->
<citylist>
<p p_id="01">
<pn>北京</pn>
<c c_id="0101">
<cn>北京</cn>
<d d_id="101010101">北京</d>
<d d_id="101010200">海淀</d>
<d d_id="101010300">朝阳</d>
<d d_id="101010400">顺义</d>
<d d_id="101010500">怀柔</d>
<d d_id="101010600">通州</d>
<d d_id="101010700">昌平</d>
<d d_id="101010800">延庆</d>
<d d_id="101010900">丰台</d>
<d d_id="101011000">石景山</d>
<d d_id="101011100">大兴</d>
<d d_id="101011200">房山</d>
<d d_id="101011300">密云</d>
<d d_id="101011400">门头沟</d>
<d d_id="101011500">平谷</d>
</c>
</p>
</citylist>
解析代码:
package com.th.zuoye;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;

import javax.management.modelmbean.XMLParseException;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

/*
* 时间:150413
* 功能:使用XMLPULL解析城市信息
*/

public class PullZy {

/**
* @param args
* @throws XmlPullParserException
* @throws IOException
*/

public List<Provence> pullParser() throws XmlPullParserException, IOException {
List<Provence> provences = null;
Provence provence = null;
List<City> cities = null;
City city = null;
List<District> districts = null;
District district = null;

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
FileInputStream fis = new FileInputStream("citys_weather.xml");
parser.setInput(fis, "utf-8");

int event = parser.getEventType();

while(event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:
System.out.println("开始解析啦");
provences = new ArrayList<Provence>();
break;

//解析并未像 SAX 解析那样监听元素的结束,而是在开始处(START_TAG)完成了大部分处理,
//因为当某个元素开始时,可以调用 解析器实例的nextText() 从 XML 文档中提取所有字符数据,
case XmlPullParser.START_TAG:

String tName = parser.getName();
System.out.println("到头标签啦" + tName);
if (tName.equals("p")) {
provence = new Provence();
cities = new ArrayList<City>();
int count = parser.getAttributeCount();//得到属性个数
for (int i = 0; i < count; i++) {
String attrName = parser.getAttributeName(i);
String attrValue = parser.getAttributeValue(i);
if (attrName.equals("p_id")) {
provence.setId(attrValue);
}
}
}
if (tName.equals("pn")) {
provence.setName(parser.nextText());

}

if (tName.equals("c")) {
city = new City();
districts = new ArrayList<District>();
int count = parser.getAttributeCount();//得到属性个数
for (int i = 0; i < count; i++) {
String attrName = parser.getAttributeName(i);
String attrValue = parser.getAttributeValue(i);
if (attrName.equals("c_id")) {
city.setId(attrValue);
}
}

}
if (tName.equals("cn")) {
city.setName(parser.nextText());
}

if (tName.equals("d")) {
district = new District();
int count = parser.getAttributeCount();//得到属性个数
for (int i = 0; i < count; i++) {
String attrName = parser.getAttributeName(i);
String attrValue = parser.getAttributeValue(i);
if (attrName.equals("d_id")) {
district.setId(attrValue);
}
}
district.setName(parser.nextText());
//districts.add(district);

}
break;

case XmlPullParser.END_TAG:
System.out.println("到结束标签啦" + parser.getName());
if ("d".equals(parser.getName())) {
districts.add(district); //??
System.out.println(111);
}
if ("c".equals(parser.getName())) {
cities.add(city);
city.setDistricts(districts);
}
if ("p".equals(parser.getName())) {
provences.add(provence);
provence.setCitys(cities);
}
break;
}
event = parser.next();
}
return provences;
}



}


问题是无法解析到end_tag </d>????为什么呢?求高手帮忙解答,不胜感激
...全文
214 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gearss00 2016-04-15
  • 打赏
  • 举报
回复
遇到一样的问题, 同问
真的一滴血 2016-04-15
  • 打赏
  • 举报
回复
引用 3 楼 u012842963 的回复:
把if 语句换成 if(){}else if(){} 语句看看
跟那个没关系,还是没看出问题来。。。
真的一滴血 2016-04-15
  • 打赏
  • 举报
回复
看到了,应该是 System.out.println("到结束标签啦" + parser.getName()); 这句,把parser.getName()省略 ,或者提取出来做个字符串,下面就不要在getName()了
真的一滴血 2016-04-15
  • 打赏
  • 举报
回复
把if 语句换成 if(){}else if(){} 语句看看
qq_34663273 2016-04-14
  • 打赏
  • 举报
回复
遇到一样的问题, 同问

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧