通过XML和android/java循环
我有一个XML文件,它有一个标签,上面写着“loop”和一个计数,这是我想循环for循环中嵌套标签的次数。我怎样才能循环使用相同的标记若干次?是否有一种方法可以将解析器移到标记的开头并从那里继续通过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");
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>