public override bool MoveNext() {
for (;;) {
if (nav.MoveToFirstChild()) {
level++;
}
else {
if (level == 0) {
return false;
}
while (!nav.MoveToNext()) {
level--;
if (level == 0) {
return false;
}
if (!nav.MoveToParent()) {
return false;
}
}
}
XmlNode node = (XmlNode)nav.UnderlyingObject;
if (node.NodeType == XmlNodeType.Element && Match(node)) {
position++;
return true;
}
}
}
}