2013-01-15 3 views
10

Un oggetto nodo pugix ha un metodo numero-di-nodi-figlio? Io non riesco a trovarlo nella documentazione e ha dovuto usare un iteratore come segue:numero pugixml di nodi figlio

int n = 0; 
for (pugi::xml_node ch_node = xMainNode.child("name"); ch_node; ch_node = ch_node.next_sibling("name")) n++; 
+0

Nessun problema, ho restaurato solo ora, prima ho letto il tuo messaggio qui. Grazie per l'eccellente codice! – lsdavies

risposta

13

non esiste alcuna funzione incorporata per calcolare che, direttamente; un altro approccio è quello di utilizzare std::distance:

size_t n = std::distance(xMainNode.children("name").begin(), xMainNode.children("name").end()); 

Naturalmente, questo è lineare nel numero di nodi secondari; si noti che il calcolo del numero di tutti i nodi figli, std::distance(xMainNode.begin(), xMainNode.end()), è anch'esso lineare: non esiste un accesso in tempo costante al conteggio dei nodi figlio.

+4

Nota: questo è l'autore di pugixml. – Homer6

+1

Ecco, l'autore di pugixml! Lol. A proposito, per chiunque sia interessato a farlo senza la parte "nome", è sufficiente rimuovere i .children(). Vedi qui: https://code.google.com/p/pugixml/issues/detail?id=105#c3 – Andrew

1

si potrebbe usare un'espressione basata su una ricerca XPath (non ci sono garanzie di efficienza, però):

xMainNode.select_nodes("name").size()