code: func NSFindIterateCtx(ctx NSContext, el *etree.Element, namespace, tag string, handle NSIterHandler) error {
  	err := NSTraverse(ctx, el, func(ctx NSContext, el *etree.Element) error {
  		_ctx, err := ctx.SubContext(el)
  		if err != nil {
  			return err
  		}
  
  		currentNS, err := _ctx.LookupPrefix(el.Space)
  		if err != nil {
  			return err
  		}
  
  		// Base case, el is the sought after element.
  		if currentNS == namespace && el.Tag == tag {
  			return handle(ctx, el)
  		}
  
  		return nil
  	})
  
  	if err != nil && err != ErrTraversalHalted {
  		return err
  	}
  
  	return nil
  }
docs: // NSFindIterateCtx conducts a depth-first traversal searching for elements with the
  // specified tag in the specified namespace. It uses the passed NSContext for prefix
  // lookups. For each such element, the passed handler function is invoked. If the
  // handler function returns an error traversal is immediately halted. If the error
  // returned by the handler is  ErrTraversalHalted then nil will be returned by
  // NSFindIterate. If any other error is returned by the handler, that error will be
  // returned by NSFindIterate.