Цикл XML Android / Java - PullRequest
       5

Цикл XML Android / Java

0 голосов
/ 14 апреля 2020

У меня есть XML файл, в котором есть теги с надписью 'l oop' и счетчик, то есть сколько раз я хочу l oop через вложенные теги в пределах для l oop. Как может il oop через одни и те же теги определенное количество раз? Есть ли способ, которым я могу переместить мой анализатор в начало тегов и продолжить оттуда?

private List readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
        parser.require(XmlPullParser.START_TAG, ns, "start");
        while (parser.next() != XmlPullParser.END_DOCUMENT) { 
            parser.next();
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }
            String currentTag = parser.getName();           /* get name of each tag in document  */
            if(currentTag.equals("once")) {              /* Look for 'command' tag */
                currentTag = getCommandType(parser);        /* Parse command tag */
                commandsList.add(currentTag);               /* Add command tag to list of commands from file */
            } else if(currentTag.equals("loop")) {          /* Look for 'loop' tag */
                int currentIndex = parser.getIndex();
                commandsList.addAll(loopCommand(parser));
            } else {
                skip(parser);                               /* Tag that is not a command or loop --> skip tag */
            }
        }
        return commandsList;
    }
private List<String> loopCommand(XmlPullParser parser) throws IOException, XmlPullParserException {
        parser.require(XmlPullParser.START_TAG, ns, "loop"); /* Require parser to start with 'loop' */
        int loopNumber = Integer.parseInt(parser.getAttributeValue(null, "count")); /* Get # of times needed to loop from 'count' tag */
        List<String> loopCommands = new ArrayList<>();
        while(parser.next() != XmlPullParser.END_TAG) {
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }
            String loopTags = parser.getName();
            String addToList = "";
            if(loopTags.equals("command")) {
                addToList = getCommandType(parser);
                loopCommands.add(addToList);
            } else  {
                skip(parser);
            }
            parser.nextTag();
        }
        return loopCommands;
    }
<start>
    <once type="fruitTree">  </command>
    <loop count="2">
        <command type="maybe"> </command>
        <command type="yes"> </command>
    </loop>
</start>

1 Ответ

1 голос
/ 14 апреля 2020

Я предлагаю вам разобрать дочерние элементы, сохранить проанализированные данные в памяти, а затем l oop поверх предварительно проанализированных данных. Это будет легче написать и эффективнее, чем пытаться перематывать парсер и разбирать каждый l oop.

...