internal override XmlNode RemoveNodeAt( int i ) {
//remove the node without checking replacement
XmlNode retNode = base.RemoveNodeAt( i );
Debug.Assert(retNode is XmlAttribute);
RemoveParentFromElementIdAttrMap( (XmlAttribute) retNode );
// after remove the attribute, we need to check if a default attribute node should be created and inserted into the tree
XmlAttribute defattr = parent.OwnerDocument.GetDefaultAttribute( (XmlElement)parent, retNode.Prefix, retNode.LocalName, retNode.NamespaceURI );
if ( defattr != null )
InsertNodeAt( i, defattr );
return retNode;
}