Android xmlPullParser总是在xml的末尾返回EventType文本(4),并且从不结束
我正试图从tomcat服务器接收一个xml文件并对其进行解析 但xmlPullParser事件在xml末尾返回文本值:4 为什么返回4?如何解决这个问题 [这是xml代码。] 由OSX的texteditor编写Android xmlPullParser总是在xml的末尾返回EventType文本(4),并且从不结束,android,xml,android-xmlpullparser,Android,Xml,Android Xmlpullparser,我正试图从tomcat服务器接收一个xml文件并对其进行解析 但xmlPullParser事件在xml末尾返回文本值:4 为什么返回4?如何解决这个问题 [这是xml代码。] 由OSX的texteditor编写 <?xml version="1.0" encoding="utf-8"?> <resources> <school_record> <imagename>mark_goodschool.png</imagen
<?xml version="1.0" encoding="utf-8"?>
<resources>
<school_record>
<imagename>mark_goodschool.png</imagename>
<code>001</code>
<name>good_elementschool</name>
<address>inhawaii</address>
<tel>123-123-1234</tel>
<homepage>http://elementschool.org</homepage>
</school_record>
</resources>
[这是解析代码。]
Thread t_downloadRes = new Thread(new Runnable() {
@Override
public void run() {
try {
//Download xml File and parse it.
URL url = new URL(STR_SERVER_URL + STR_SERVER_XML);
InputStream is = url.openStream();
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(new InputStreamReader(is, "utf-8"));
int eventType = parser.getEventType();
AA_SchoolDTO stu = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
String startTag = parser.getName();
if ("school_record".equals(startTag)) {
stu = new AA_SchoolDTO();
}
if (startTag.equals("imagename")) {
stu.setStr_imageName(parser.nextText());
}
if (startTag.equals("code")) {
stu.setStr_code(parser.nextText());
}
if (startTag.equals("name")) {
stu.setStr_name(parser.nextText());
}
if (startTag.equals("address")) {
stu.setStr_address(parser.nextText());
}
if (startTag.equals("tel")) {
stu.setStr_tel(parser.nextText());
}
if (startTag.equals("homepage")) {
stu.setStr_homPage(parser.nextText());
}
break;
case XmlPullParser.END_TAG:
String endTag = parser.getName();
if ("school_record".equals(endTag))
allSchoolList.add(stu);
break;
}
eventType = parser.next(); //// <== return event TEXT (value : 4) at the end of xml.
}
is.close();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
问题:
您需要为解析器使用文本标记,因此需要在switch语句中再添加一项,即XmlPullParser.Text,以获取标记中的文本
此外,您还需要在END_标记而不是START_标记中调用AA_SchoolDTO类的setter方法
但是在开始标记中实例化AA_SchoolDTO对象
样本:
@S.J.Lim我弄错了吗?它在xml的末尾返回了END_文档。。我没有看到不断调试。@S.J.Lim这是问题还是陈述?是的,当您到达文件末尾时,它将返回END_文档
parser.nextText()
while (eventType != XmlPullParser.END_DOCUMENT) {
String textData;
String startTag = parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if ("school_record".equals(startTag)) {
stu = new AA_SchoolDTO();
}
break;
case XmlPullParser.TEXT:
textData = xpp.getText();
break;
case XmlPullParser.END_TAG:
if (startTag.equals("imagename")) {
stu.setStr_imageName(textData);
}
if (startTag.equals("code")) {
stu.setStr_code(textData);
}
if (startTag.equals("name")) {
stu.setStr_name(textData);
}
if (startTag.equals("address")) {
stu.setStr_address(textData);
}
if (startTag.equals("tel")) {
stu.setStr_tel(textData);
}
if (startTag.equals("homepage")) {
stu.setStr_homPage(textData);
}
if ("school_record".equals(endTag))
allSchoolList.add(stu);
break;
}
eventType = parser.next(); //// <== return event TEXT (value : 4) at the end of xml.