# class REXML::Formatters::Default

### Public Class Methods

new( ie_hack=false ) click to toggle source

Prints out the `XML` document with no formatting – except if ie_hack is set.

ie_hack

  If set to true, then inserts whitespace before the close of an empty tag, so that IE's bad `XML` parser doesn't choke.

    # File lib/rexml/formatters/default.rb, line 12
    def initialize( ie_hack=false )
      @ie_hack = ie_hack
    end

### Public Instance Methods

write( node, output ) click to toggle source

Writes the node to some output.

node

  The node to write

output

  A class implementing `&lt;&lt;`. Pass in an `Output` object to change the output encoding.

    # File lib/rexml/formatters/default.rb, line 23
    def write( node, output )
      case node

      when Document
        if node.xml_decl.encoding != 'UTF-8' && !output.kind_of?(Output)
          output = Output.new( output, node.xml_decl.encoding )
        end
        write_document( node, output )

      when Element
        write_element( node, output )

      when Declaration, ElementDecl, NotationDecl, ExternalEntity, Entity,
           Attribute, AttlistDecl
        node.write( output,-1 )

      when Instruction
        write_instruction( node, output )

      when DocType, XMLDecl
        node.write( output )

      when Comment
        write_comment( node, output )

      when CData
        write_cdata( node, output )

      when Text
        write_text( node, output )

      else
        raise Exception.new("XML FORMATTING ERROR")

      end
    end

### Protected Instance Methods

write_cdata( node, output ) click to toggle source

    # File lib/rexml/formatters/default.rb, line 98
    def write_cdata( node, output )
      output << CData::START
      output << node.to_s
      output << CData::STOP
    end

write_comment( node, output ) click to toggle source

    # File lib/rexml/formatters/default.rb, line 92
    def write_comment( node, output )
      output << Comment::START
      output << node.to_s
      output << Comment::STOP
    end

write_document( node, output ) click to toggle source

    # File lib/rexml/formatters/default.rb, line 61
    def write_document( node, output )
      node.children.each { |child| write( child, output ) }
    end

write_element( node, output ) click to toggle source

    # File lib/rexml/formatters/default.rb, line 65
    def write_element( node, output )
      output << "<#{node.expanded_name}"

      node.attributes.to_a.map { |a|
        Hash === a ? a.values : a
      }.flatten.sort_by {|attr| attr.name}.each do |attr|
        output << " "
        attr.write( output )
      end unless node.attributes.empty?

      if node.children.empty?
        output << " " if @ie_hack
        output << "/"
      else
        output << ">"
        node.children.each { |child|
          write( child, output )
        }
        output << "</#{node.expanded_name}"
      end
      output << ">"
    end

write_instruction( node, output ) click to toggle source

    # File lib/rexml/formatters/default.rb, line 104
    def write_instruction( node, output )
      output << Instruction::START
      output << node.target
      content = node.content
      if content
        output << ' '
        output << content
      end
      output << Instruction::STOP
    end

write_text( node, output ) click to toggle source

    # File lib/rexml/formatters/default.rb, line 88
    def write_text( node, output )
      output << node.to_s()
    end