def write(*arguments)
      if arguments.size == 1 and arguments[0].class == Hash
        options = arguments[0]

        output     = options[:output]
        indent     = options[:indent]
        transitive = options[:transitive]
        ie_hack    = options[:ie_hack]
        encoding   = options[:encoding]
      else
        output, indent, transitive, ie_hack, encoding, = *arguments
      end

      output   ||= $stdout
      indent   ||= -1
      transitive = false if transitive.nil?
      ie_hack    = false if ie_hack.nil?
      encoding ||= xml_decl.encoding

      if encoding != 'UTF-8' && !output.kind_of?(Output)
        output = Output.new( output, encoding )
      end
      formatter = if indent > -1
          if transitive
            require "rexml/formatters/transitive"
            REXML::Formatters::Transitive.new( indent, ie_hack )
          else
            REXML::Formatters::Pretty.new( indent, ie_hack )
          end
        else
          REXML::Formatters::Default.new( ie_hack )
        end
      formatter.write( self, output )
    end
def write(*arguments)
      if arguments.size == 1 and arguments[0].class == Hash
        options = arguments[0]

        output     = options[:output]
        indent     = options[:indent]
        transitive = options[:transitive]
        ie_hack    = options[:ie_hack]
        encoding   = options[:encoding]
      else
        output, indent, transitive, ie_hack, encoding, = *arguments
      end

      output   ||= $stdout
      indent   ||= -1
      transitive = false if transitive.nil?
      ie_hack    = false if ie_hack.nil?
      encoding ||= xml_decl.encoding

      if encoding != 'UTF-8' && !output.kind_of?(Output)
        output = Output.new( output, encoding )
      end
      formatter = if indent > -1
          if transitive
            require "rexml/formatters/transitive"
            REXML::Formatters::Transitive.new( indent, ie_hack )
          else
            REXML::Formatters::Pretty.new( indent, ie_hack )
          end
        else
          REXML::Formatters::Default.new( ie_hack )
        end
      formatter.write( self, output )
    end
:call-seq:
    doc.write(output=$stdout, indent=-1, transtive=false, ie_hack=false, encoding=nil)
    doc.write(options={:output => $stdout, :indent => -1, :transtive => false, :ie_hack => false, :encoding => nil})

 Write the XML tree out, optionally with indent.  This writes out the
 entire XML document, including XML declarations, doctype declarations,
 and processing instructions (if any are given).

 A controversial point is whether Document should always write the XML
 declaration (<?xml version='1.0'?>) whether or not one is given by the
 user (or source document).  REXML does not write one if one was not
 specified, because it adds unnecessary bandwidth to applications such
 as XML-RPC.

 Accept Nth argument style and options Hash style as argument.
 The recommended style is options Hash style for one or more
 arguments case.

 _Examples_
   Document.new("<a><b/></a>").write

   output = ""
   Document.new("<a><b/></a>").write(output)

   output = ""
   Document.new("<a><b/></a>").write(:output => output, :indent => 2)

 See also the classes in the rexml/formatters package for the proper way
 to change the default formatting of XML output.

 _Examples_

   output = ""
   tr = Transitive.new
   tr.write(Document.new("<a><b/></a>"), output)

 output::
   output an object which supports '<< string'; this is where the
   document will be written.
 indent::
   An integer.  If -1, no indenting will be used; otherwise, the
   indentation will be twice this number of spaces, and children will be
   indented an additional amount.  For a value of 3, every item will be
   indented 3 more levels, or 6 more spaces (2 * 3). Defaults to -1
 transitive::
   If transitive is true and indent is >= 0, then the output will be
   pretty-printed in such a way that the added whitespace does not affect
   the absolute *value* of the document -- that is, it leaves the value
   and number of Text nodes in the document unchanged.
 ie_hack::
   This hack inserts a space before the /> on empty tags to address
   a limitation of Internet Explorer.  Defaults to false
 encoding::
   Encoding name as String. Change output encoding to specified encoding
   instead of encoding in XML declaration.
   Defaults to nil. It means encoding in XML declaration is used.