Чтение XML-файла в Android - PullRequest
       24

Чтение XML-файла в Android

1 голос
/ 05 января 2012

У меня есть файл questions.xml со списком вопросов для моей викторины, и я пытаюсь зачитать это в банк вопросов в моей программе. Я написал следующий метод:

// Creates the QuestionBank according to user requirements
public ArrayList<Question> createQuestionBank(String diff) {
    int eventType = -1;
    boolean FoundQuestions = false;
    QuestionBank = new ArrayList<Question>();

    // Find Question records from XML
    System.out.println("check 1");
    while (eventType != XmlResourceParser.END_DOCUMENT) {   // Keep reading until the end of the xml file
        System.out.println("check 2");
        if (eventType == XmlResourceParser.START_TAG) { 
            System.out.println("check 3");
            String Name = questionList.getName();
            if (Name.equals("question")){   // Check whether the tag found is the one for question
                System.out.println("check 4");
                // Check difficulty of question
                String diffCheck = questionList.getAttributeValue(null, "difficulty");
                if (diff.equals("Any") || diff.equals(diffCheck)){
                    FoundQuestions = true;
                    System.out.println("check 5");
                    createandaddquestion();
                    System.out.println("check 6");
                }
            }
            try {
                eventType = questionList.next();
            } catch (XmlPullParserException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    return QuestionBank;
}

Я установил несколько выходных операторов, чтобы определить, где моя программа работала неправильно. Метод выводит бесконечный цикл check2 и никогда не переходит к проверке 3, поэтому застревает в операторе:

if (eventType == XmlResourceParser.START_TAG) 

Я адаптировал некоторый код, который нашел в другом месте, и не совсем понимаю, что происходит. Насколько я понимаю, это утверждение находит начальную часть тега, который я затем выполняю, чтобы проверить, является ли это тегом вопроса, который обозначает начало моей записи вопроса; что же такое eventType? Очевидно, что это целое число, но почему XMLResourceParser.START_TAG возвращает целое число при обнаружении тега? Конечно, было бы больше смысла быть логическим? Из приведенного выше поста я не думаю, что мне нужно подчеркивать, что я новичок в Android, поэтому, пожалуйста, будьте терпеливы! Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 05 января 2012

Мне кажется, что eventType никогда не обновляется. Я не знаю достаточно о специфике парсинга XML, но кажется, что eventType нужно обновить, иначе вы застрянете в бесконечном цикле, так как вы в данный момент застряли. Судя по вашему коду, я думаю, что вы хотите переместить этот код на один набор скобок:

        try {
            eventType = questionList.next();
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Это гарантирует, что он вызывается во время каждого цикла команды while ().

1 голос
/ 05 января 2012

Я использую синтаксический анализатор Sax, и он прекрасно работает:

http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/

0 голосов
/ 05 января 2012

Может оказаться полезным API Xerces2.Он реализует синтаксический анализ SAX и DOM.http://xerces.apache.org/xerces2-j/

...