Android XMLPullParser检查特定子节点

Android XMLPullParser检查特定子节点,android,xml,xmlpullparser,Android,Xml,Xmlpullparser,我有这样一个XML: <node_a> <node_b> <required/> <random_node1/> </node_b> <node_c> <required/> </node_c> <node_d> <random_node2/> </node_d

我有这样一个XML:

<node_a>
    <node_b>
        <required/>
        <random_node1/>
    </node_b>
    <node_c>
        <required/>
    </node_c>
    <node_d>
        <random_node2/>
    </node_d>
</node_a>

并尝试使用

我希望遍历XML并添加包含子节点的所有节点名。在这个例子中,我的结果列表应该有节点b和节点c

我面临的问题是,如果我做一个
解析器.next()
,指针就会向前移动,我不可能返回并再次遍历它们。没有用于检查所有子节点的api

最好的方法是什么。

像这样的方法

XmlPullParser paser = Xml.newPullParser();
... other init that you might need ...

parser.next(); // get first token

// In general, you'll need to add error checking such as this:  
if (parser.getEventType() != XmlPullParser.START_TAG)
  ...error...
String parentName = parser.getName(); // this will be "node_a"

parser.next(); // done with first token; fetch next
while (parser.getEventType() == XmlPullParser.START_TAG)
{
  String childName = parser.getName(); // will be "node_b" first time through loop

  // get nested attributes - e.g. "required"
  parser.next();
  while (parser.getEventType() == XmlPullParser.START_TAG)
  {
    String nestedAttribute = parser.getName();
    ... do something with nestedAttribute ...

    parser.next();
  }
  if (parser.getEventType() != XmlPullParser.END_TAG)
    ...error...

  parser.next(); // consume END_TAG for nested attributes
}
if (parser.getEventType() != XmlPullParser.END_TAG)
  ...error...

// make sure we're at end of file
parser.next(); // consume END_TAG for node_a
if (parser.getEventType() != XmlPullPaarser.END_DOCUMENT)
  ...error...

你在这方面有什么进展吗?如果我的回答有帮助,请告诉我。