xml pull активы парсера xml - PullRequest
10 голосов
/ 24 мая 2010

Как я могу разобрать локальный XML-файл в папке ресурсов, используя pull-анализатор? Я не могу заставить парсер работать. Это всегда вызывает исключение io. Я думаю, что не могу получить путь к файлу или подключение к файлу.

1 Ответ

23 голосов
/ 14 января 2011

mixm,

Я играл разными способами, чтобы загрузить локальный файл как из 'assets', так и из 'res', но чтобы ответить на ваш вопрос, как и было задано (как, кажется, никто другой):

Во-первых, либо убедитесь, что ваш XML действителен перед тестированием, либо отключите проверку, вот как вы можете это сделать и создать экземпляр парсера одновременно:

    try {
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setValidating(false);
        XmlPullParser myxml = factory.newPullParser();

Затем откройте файл xml и установите в качестве входных данных для вашего синтаксического анализатора:

        InputStream raw = getApplicationContext().getAssets().open("simple.xml");
        myxml.setInput(raw, null);

Теперь настройте ваш цикл извлечения (или другое, зависит от того, хотите ли вы выполнять отложенное вытягивание или нет, это ваши дизайнерские решения:

        int eventType = myxml.getEventType();
        while(eventType != XmlPullParser.END_DOCUMENT) {
            if(eventType == XmlPullParser.START_DOCUMENT) {

                Log.d(MY_DEBUG_TAG, "In start document");
            }
            else if(eventType == XmlPullParser.START_TAG) {
                Log.d(MY_DEBUG_TAG, "In start tag = "+myxml.getName());
            }
            else if(eventType == XmlPullParser.END_TAG) {
                Log.d(MY_DEBUG_TAG, "In end tag = "+myxml.getName());

            }
            else if(eventType == XmlPullParser.TEXT) {
                Log.d(MY_DEBUG_TAG, "Have text = "+myxml.getText());
            }
            eventType = myxml.next();
        }
    } catch (XmlPullParserException e) {

Обратите внимание на myxml.getEventType(), вам нужно сделать это, чтобы запустить анализ и обработать события какого типа вы вызываете. Примечание: блоки захвата опущены для удобства чтения.

Протестировано выше на 2.1, надеюсь, это поможет -Frank

...