def children(recursive = false, namespace = nil, name = :DEFAULT, &block) # :yields: child
      if name == :DEFAULT
        name = namespace
        namespace = nil
      end

      if block_given?
        each_child(recursive, namespace, name, &block)
        return nil
        
      else
        unless recursive or name or namespace
          return @children
          
        else
          result = []
          each_child(recursive, namespace, name) { |child|
            result << child
          }
          return result
        end
      end
    end
def children(recursive = false, namespace = nil, name = :DEFAULT, &block) # :yields: child
      if name == :DEFAULT
        name = namespace
        namespace = nil
      end

      if block_given?
        each_child(recursive, namespace, name, &block)
        return nil
        
      else
        unless recursive or name or namespace
          return @children
          
        else
          result = []
          each_child(recursive, namespace, name) { |child|
            result << child
          }
          return result
        end
      end
    end
children(recursive)
   children(recursive, name)
   children(recursive, namespace, name)

   children(recursive) { |child| ... }
   children(recursive, name) { |child| ... }
   children(recursive, namespace, name) { |child| ... }

 Returns an Array of the children Tags of this Tag or enumerates them.

 _recursive_:: if true children and all descendants will be returned. False by default.
 _name_:: if not nil, only children having this name will be returned. Nil by default.
 _namespace_:: use nil for all namespaces and "" for the default one. Nil by default.

   tag.children # => array of the children
   tag.children(true) { |descendant| ... }

   tag.children(false, "name") # => children of name "name"
   tag.children(false, "ns", nil) # => children of namespace "ns"