如何使用Sax pull解析在每个学生的TextView中解析和放置值

时间:2011-08-16 10:55:04

标签: android android-xml

<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元素。

提前致谢。

1 个答案:

答案 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();
}

注意:此代码不会处理任何异常。你必须自己处理它。