XmlPullParser получить файл из файловой системы

Я создаю xml-файл своего приложения в файловой системе Android. Мне нужно проанализировать этот файл с помощью XmlPullParser, но при компиляции я получаю сообщение об ошибке: «Возможно, анализатор переменных не был инициализирован». Мой код:

InputStream inputStream = openFileInput("settings.xml");
XmlPullParser parser;
parser.setInput(inputStream, null);

Понятия не имею, как его отремонтировать. Я использую Intellij IDEA12 и Android 2.3 SDK.


person Coma White    schedule 29.03.2013    source источник
comment
сначала инициализируйте свой paser, как в моем коде.   -  person Monty    schedule 29.03.2013


Ответы (3)


Я использую Eclipse, и у меня сработал приведенный ниже код:

Возможно, вам не хватает первой строки ниже:

 XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();
 xppf.setNamespaceAware(true); 
 XmlPullParser xpp = xppf.newPullParser();

 File myXML = new File("myXML.xml"); // give proper path            
 FileInputStream fis = new FileInputStream(myXML);

 xpp.setInput(fis, null);
person SKK    schedule 29.03.2013
comment
Я пробую это рано, и это работает. Но я хочу сделать это только с XmlPullParser. Могу ли я это сделать? - person Coma White; 29.03.2013
comment
Вам нужно создать экземпляр XmlPullParser, чтобы использовать его. и для этого вам понадобится XmlPullParserFactory. Мой код работает для меня. И вот как бы я это сделал. Вы можете проверить документы Google, если это необходимо. - person SKK; 29.03.2013

Его рабочий код в eclipes, но не знаю об Intellij IDEA12

напишите этот код, чтобы открыть и получить xml из активов или изменить в соответствии с вашими потребностями

try {           

    XmlPullParserFactory     xppf = XmlPullParserFactory.newInstance();
    XmlPullParser  = xppf.newPullParser();                  
    AssetManager manager = context.getResources().getAssets();
    InputStream input = manager.open("createDb.xml");
    xpp.setInput(input, null);
    int type = xpp.getEventType();
    while(type != XmlPullParser.END_DOCUMENT) {
        if(type == XmlPullParser.START_DOCUMENT) {

            Log.d(Tag, "In start document");
        }
        else if(type == XmlPullParser.START_TAG) {
            Log.d(Tag, "In start tag = "+xpp.getName());
        }
        else if(type == XmlPullParser.END_TAG) {
            Log.d(Tag, "In end tag = "+xpp.getName());

        }
        else if(type == XmlPullParser.TEXT) {
            Log.d(Tag, "Have text = "+xpp.getText());
            if(xpp.isWhitespace())
            {

            }
            else
            {
                String strquery = xpp.getText();
                db.execSQL(strquery);
            }

        }
        type = xpp.next();
    }
} 
catch (XmlPullParserException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
person Monty    schedule 29.03.2013
comment
Работает ли код, безусловно, не должен зависеть от используемой вами IDE, поскольку код работает на телефоне, а не в IDE;) - person AgentKnopf; 05.07.2013

Вы не создаете экземпляр XmlPullParser. Пытаться:

XmlPullParser parser = Xml.newPullParser();

Также необходимо позвонить:

parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);

Из документов:

Используйте этот вызов, чтобы изменить общее поведение синтаксического анализатора, например, обработку пространства имен >или обработку объявления типа документа. Этот метод необходимо вызывать перед первым вызовом >next или nextToken. В противном случае создается исключение.

Пример: вызовите setFeature(FEATURE_PROCESS_NAMESPACES, true), чтобы включить обработку пространства имен >. Начальные настройки соответствуют свойствам, запрошенным у фабрики XML Pull >Parser. Если ничего не было запрошено, все функции деактивированы по умолчанию.

person croyd    schedule 29.03.2013
comment
Вы говорите, что ваша проблема решена? Можете ли вы сказать, какой раствор вы использовали? - person croyd; 29.03.2013