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 для проверки всех дочерних узлов.

С каким подходом лучше всего пойти.


person Prasanna    schedule 15.11.2013    source источник
comment
Вы добились каких-либо успехов в этом? Пожалуйста, дайте мне знать, помог ли мой ответ.   -  person Peri Hartman    schedule 18.11.2013


Ответы (1)


Что-то вроде этого?

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...
person Peri Hartman    schedule 15.11.2013