def <<(o)
      if o.is_a?(Tag)
        add_child(o)
      elsif o.is_a?(Hash)
        o.each_pair { |key, value|
          namespace, key = key.split(/:/) if key.match(/:/)
          namespace ||= ""
          set_attribute(namespace, key, value)
        }
      elsif o.is_a? String
        add_value(o)
      elsif o.is_a? Enumerable
        o.each { |item|
          if item.is_a? Enumerable and not item.is_a? String
            anonymous = new_child("content")
            anonymous << item
          else
            self << item
          end
        }
      else
        add_value(o)
      end
      return self
    end
def <<(o)
      if o.is_a?(Tag)
        add_child(o)
      elsif o.is_a?(Hash)
        o.each_pair { |key, value|
          namespace, key = key.split(/:/) if key.match(/:/)
          namespace ||= ""
          set_attribute(namespace, key, value)
        }
      elsif o.is_a? String
        add_value(o)
      elsif o.is_a? Enumerable
        o.each { |item|
          if item.is_a? Enumerable and not item.is_a? String
            anonymous = new_child("content")
            anonymous << item
          else
            self << item
          end
        }
      else
        add_value(o)
      end
      return self
    end
Adds the given object as a child if it is a +Tag+, as an attribute if it is a Hash
 {key => value} (supports namespaces), or as a value otherwise.
 If it is an Enumerable (e.g. Array), each of its elements is added to this Tag via this
 operator. If any of its elements is itself an Enumerable, then an anonymous tag is created and
 the Enumerable is passed to it via this operator (see the examples below).

   tag << Tag.new("child")
   tag << 123                          # new integer value
   tag << "islamabad"                  # new string value
   tag << { "metric:length" => 1027 }  # new attribute (with namespace)
   tag << [nil, 456, "abc"]            # several values added

   tag = Tag.new("tag")
   tag << [[1, 2, 3], [4, 5, 6]]       # tag {
                                       #   1 2 3
                                       #   4 5 6
                                       # }

 Of course, despite the fact that String is an Enumerable, it is considered as the type of
 values.

 Returns +self+.

 Use other accessors (#add_child, #add_value, #attributes, etc) for a stricter and less
 "magical" behavior.