/// <summary> /// Moves to the next attribute. /// </summary> /// <returns> /// <c>true</c> if there is a next attribute; <c>false</c> if there are no more attributes. /// </returns> /// <remarks> /// If the current node is an element node, this method is equivalent to <see cref="MoveToFirstAttribute"/>. If /// <see cref="MoveToNextAttribute"/> returns <c>true</c>, the reader moves to the next attribute; otherwise, the /// position of the reader does not change. /// </remarks> public override bool MoveToNextAttribute() { if (CurrentNode is IXmlTextBuilder && ParentNode is IXmlAttributeBuilder) { _enumerators.RemoveLast(); } if (CurrentNode is IXmlElementBuilder && CurrentNode.HasAttributes()) { _enumerators.AddLast(CurrentNode.GetAttributes().GetConservativeEnumerator()); } if (CurrentEnumerator is IEnumerator <IXmlAttributeBuilder> && CurrentEnumerator.MoveNext()) { _nodeType = XmlNodeType.Attribute; return(true); } return(false); }