Как проанализировать и поместить значения в TextView каждого учащегося ... используя синтаксический анализ Sax - PullRequest
0 голосов
/ 16 августа 2011
<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 Ответ

1 голос
/ 16 августа 2011

Это действительно зависит от того, для чего вам нужны данные.Но если вам нужно извлечь данные из xml и у вас есть подготовленные к ним классы (например, ученик, степень и т. Д.), Вы реализуете нечто похожее на следующий фрагмент кода.

Предполагая, что у вас есть данные xmlв переменной dataReader в качестве 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();
}

ПРИМЕЧАНИЕ: этот код НЕ обрабатывает какие-либо исключения.Вам придется разобраться с этим самостоятельно.

...