diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 4b155a0e..6046a81a 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -6811,17 +6811,28 @@ namespace pugi cur = cur->first_child; } else if (cur->next_sibling) + { cur = cur->next_sibling; + walker.out(arg_for_each); + } else { while (!cur->next_sibling && cur != _root && cur->parent) { + xml_node arg_out(cur); + --walker._depth; cur = cur->parent; + + walker.out(arg_out); } if (cur != _root) + { + xml_node arg_out(cur); cur = cur->next_sibling; + walker.out(arg_out); + } } } while (cur && cur != _root); diff --git a/src/pugixml.hpp b/src/pugixml.hpp index c5744e72..a0bd3510 100644 --- a/src/pugixml.hpp +++ b/src/pugixml.hpp @@ -1048,6 +1048,8 @@ namespace pugi // Callback that is called for each node traversed virtual bool for_each(xml_node& node) = 0; + // Callback that is called after each node traversed + virtual void out(const xml_node& ){} // Callback that is called when traversal ends virtual bool end(xml_node& node);