2013-11-15 2 views
0

У меня есть XML, как это:XMLPullParser проверки конкретного узла ребенка

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

и пытается разобрать его с помощью XMLPullParser

Я хочу перебирать XML и добавить все имена узлов, которые имеют ребенок. В этом примере i мой список результатов должен иметь node_b и node_c.

Проблема, с которой сталкиваюсь, если я делаю parser.next(), тогда указатель движется вперед, и я не могу вернуться и повторить их снова. Нет Api для проверки всех дочерних узлов.

Каким будет наилучший подход.

+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... 
Смежные вопросы