2013-01-15 10 views
10

Czy obiekt węzła pugixml ma metodę liczby węzłów potomnych? Nie mogę go znaleźć w dokumentacji i musiałem użyć iterator następująco:Liczba węzłów potomnych pugixml

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

Nie ma obaw, że przywrócił go przed chwilą czytałem tutaj swoją wiadomość. Dziękuję za doskonały kod! – lsdavies

Odpowiedz

13

Nie ma wbudowaną funkcję obliczyć bezpośrednio; jedno inne podejście jest użycie std::distance:

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

Oczywiście, jest to liniowy liczby węzłów potomnych; zauważ, że obliczanie liczby wszystkich węzłów potomnych, std::distance(xMainNode.begin(), xMainNode.end()), jest również liniowe - nie ma stałego dostępu do liczby węzłów potomnych.

+4

Uwaga: To jest autor pugixml. – Homer6

+1

Oto autor pugixml! Lol. Przy okazji, dla każdego, kto jest zainteresowany zrobieniem tego bez części "nazwa", możesz po prostu usunąć .children(). Zobacz tutaj: https://code.google.com/p/pugixml/issues/detail?id=105#c3 – Andrew

1

Można użyć wyrażenia w oparciu o poszukiwaniu XPath (bez gwarancji wydajności, choć):

xMainNode.select_nodes("name").size() 
Powiązane problemy