/// <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);
 }