2013-01-15 12 views
10

Hat ein pugixml-Knotenobjekt eine Anzahl-Kind-Knoten-Methode? Ich kann es nicht in der Dokumentation und hatte einen Iterator wie folgt zu verwenden:pugixml Anzahl der untergeordneten Knoten

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

Keine Sorge, ich habe es gerade jetzt wieder, bevor ich Ihre Nachricht lesen. Danke für den ausgezeichneten Code! – lsdavies

Antwort

13

Es gibt keine integrierte Funktion, die direkt zu berechnen; ein anderer Ansatz ist std::distance zu verwenden:

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

Natürlich ist diese linear in der Anzahl der untergeordneten Knoten ist; Beachten Sie, dass die Berechnung der Anzahl aller untergeordneten Knoten, std::distance(xMainNode.begin(), xMainNode.end()), ebenfalls linear ist - es gibt keinen konstanten Zeitzugriff auf die Anzahl der untergeordneten Knoten.

+4

Hinweis: Dies ist der Autor von pugixml. – Homer6

+1

10 Siehe, der Autor von Pugixml! Lol. Übrigens, für alle, die daran interessiert sind, dies ohne den Namensteil zu tun, können Sie einfach die .children() entfernen. Siehe hier: https://code.google.com/p/pugixml/issues/detail?id=105#c3 – Andrew

1

Sie können einen Ausdruck auf der Grundlage einer XPath Suche verwenden (ohne Effizienz garantiert, obwohl):

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