繁体   English   中英

循环通过 XML android/java

[英]Looping through XML android/java

我有一个 XML 文件,其中包含“循环”标签和一个计数,这是我想循环遍历 for 循环中的嵌套标签的次数。 我怎样才能循环通过相同的标签一定次数? 有没有办法可以将我的解析器移动到标签的开头并从那里继续?

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>

我建议你解析孩子,将解析后的数据存储在 memory 中,然后遍历预解析的数据。 这将比尝试倒带解析器并在每个循环上解析更容易编写和更有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM