<students>
<student>
<id type="integer">101</id>
<name>James</name>
<degree>
<id type="integer">1978271</id>
<name>SCJP</name>
</degree>
</student>
<student>
<id type="integer">102</id>
<name>Joseph</name>
<degree>
<id type="integer">1978272</id>
<name>MCST</name>
</degree>
</student>
</students>
请建议我如何通过XMLPullParser
解析它,我知道XmlPullParser
的概念
开始和结束End元素。
提前致谢。
答案 0 :(得分:1)
这实际上取决于您需要的数据。但是如果你需要从xml中提取数据并且你已经为它准备好了你的课程(例如学生,学位等),你可以实现类似于以下代码的东西。
假设您将dataReader变量中的xml数据作为Reader,进行测试可以使用:
String stringData = "...the data goes here...";
StringReader dataReader = new StringReader (stringData);
代码如下(准备好学生和学位课程):
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(dataReader);
int eventType = xpp.getEventType();
List<Student> students = new ArrayList<Student>();
Student lastStudent = null;
Degree lastDegree = null;
String lastStartTag = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
final String startTag = xpp.getName();
if ("student".equalsIgnoreCase(startTag)) {
lastStudent = new Student();
} else if ("degree".equalsIgnoreCase(startTag)) {
lastDegree = new Degree();
// TODO: Implement rest of start tags here...
}
lastStartTag = startTag;
} else if (eventType == XmlPullParser.END_TAG) {
final String endTag = xpp.getName();
if ("student".equalsIgnoreCase(endTag)) {
students.add(lastStudent);
lastStudent = null;
} else if ("degree".equalsIgnoreCase(endTag)) {
student.addDegree(lastDegree);
lastDegree = null;
}
// TODO: Implement rest of end tags here...
} else if (eventType == XmlPullParser.TEXT) {
final String text = xpp.getText();
if ("name".equalsIgnoreCase(lastStartTag)) {
if (lastStudent != null) {
lastStudent.setName(text);
} else if (lastDegree != null) {
lastDegree.setName(text);
}
} else if ("id".equalsIgnoreCase(lastStartTag)) {
if (lastStudent != null) {
lastStudent.setId(Integer.parseInt(text));
} else if (lastDegree != null) {
lastDegree.setId(Integer.parseInt(text));
}
}
// TODO: Implement rest of start tags here
}
eventType = xpp.next();
}
注意:此代码不会处理任何异常。你必须自己处理它。