docs: def _remove_child_node(node, context, xast, if_empty=False):
      '''Remove a child node based on the specified xpath.
  
      :param node: lxml element relative to which the xpath will be
      	interpreted
      :param context: any context required for the xpath (e.g.,
      	namespace definitions)
      :param xast: parsed xpath (xpath abstract syntax tree) from
  	:mod:`eulxml.xpath`
      :param if_empty: optional boolean; only remove a node if it is
  	empty (no attributes and no child nodes); defaults to False
  
      :returns: True if a node was deleted
      '''
      xpath = serialize(xast)
      child = _find_xml_node(xpath, node, context)
      if child is not None:
          # if if_empty was specified and node has children or attributes
          # other than any predicates defined in the xpath, don't remove
          if if_empty is True and \
                 not _empty_except_predicates(xast, child, context):
              return False
          node.remove(child)
          return True