XMLPullParser检查特定的Child节点

时间:2013-11-15 16:09:03

标签: android xml xmlpullparser

我有这样的XML:

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

并尝试使用XMLPullParser

解析它

我想遍历XML并添加具有子节点的所有节点名称。在这个例子中,我的结果列表应该有node_b和node_c。

我面临的问题是,如果我做了parser.next(),那么指针就会向前移动,我不可能再次回过头来重复它们。没有api来检查所有子节点。

最佳方法是什么。

1 个答案:

答案 0 :(得分:0)

这样的东西?

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...