/** * If the stack contains an element with this tag's name, pop up the stack to remove the first occurrence. If not * found, skips. * * @param endTag */ private void PopStackToClose(Token.EndTag endTag) { string elName = endTag.Name(); Element firstFound = null; IEnumerator <Element> it = _stack.GetDescendingEnumerator(); while (it.MoveNext()) { Element next = it.Current; if (next.NodeName.Equals(elName)) { firstFound = next; break; } } if (firstFound == null) { return; // not found, skip } it = _stack.GetDescendingEnumerator(); List <Element> remove = new List <Element>(); while (it.MoveNext()) { Element next = it.Current; if (next == firstFound) { remove.Add(next); break; } else { remove.Add(next); } } foreach (Element item in remove) { _stack.Remove(item); } }