Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过XML和android/java循环_Java_Android_Xml_Parsing - Fatal编程技术网

通过XML和android/java循环

通过XML和android/java循环,java,android,xml,parsing,Java,Android,Xml,Parsing,我有一个XML文件,它有一个标签,上面写着“loop”和一个计数,这是我想循环for循环中嵌套标签的次数。我怎样才能循环使用相同的标记若干次?是否有一种方法可以将解析器移到标记的开头并从那里继续 private List readFeed(XmlPullParser parser) throws XmlPullParserException, IOException { parser.require(XmlPullParser.START_TAG, ns, "start");

我有一个XML文件,它有一个标签,上面写着“loop”和一个计数,这是我想循环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 loopCommand(XmlPullParser解析器)抛出IOException、XmlPullParserException{
require(XmlPullParser.START_标记,ns,“loop”);/*要求解析器以“loop”开头*/
int loopNumber=Integer.parseInt(parser.getAttributeValue(null,“count”);/*获取从“count”标记循环所需的次数*/
List loopCommands=new ArrayList();
while(parser.next()!=XmlPullParser.END_标记){
if(parser.getEventType()!=XmlPullParser.START_标记){
继续;
}
String loopTags=parser.getName();
字符串addToList=“”;
if(loopTags.equals(“命令”)){
addToList=getCommandType(解析器);
loopCommands.add(addToList);
}否则{
跳过(解析器);
}
parser.nextTag();
}
返回循环命令;
}

我建议您解析子级,将解析后的数据存储在内存中,然后循环预解析后的数据。这将比在每个循环上倒带解析器和解析更容易编写,也更有效

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>