123456789_123456789_123456789_123456789_123456789_

Class: REXML::Formatters::Default

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Inherits: Object
Defined in: lib/rexml/formatters/default.rb

Class Method Summary

Instance Method Summary

Constructor Details

.new(ie_hack = false) ⇒ Default

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.

[ GitHub ]

  
# File 'lib/rexml/formatters/default.rb', line 11

def initialize( ie_hack=false )
  @ie_hack = ie_hack
end

Instance Method Details

#write(node, output)

Writes the node to some output.

node

The node to write

output

A class implementing <<. Pass in an Output object to change the output encoding.

[ GitHub ]

  
# File 'lib/rexml/formatters/default.rb', line 22

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

#write_cdata(node, output) (protected)

[ GitHub ]

  
# File 'lib/rexml/formatters/default.rb', line 97

def write_cdata( node, output )
  output << CData::START
  output << node.to_s
  output << CData::STOP
end

#write_comment(node, output) (protected)

[ GitHub ]

  
# File 'lib/rexml/formatters/default.rb', line 91

def write_comment( node, output )
  output << Comment::START
  output << node.to_s
  output << Comment::STOP
end

#write_document(node, output) (protected)

[ GitHub ]

  
# File 'lib/rexml/formatters/default.rb', line 60

def write_document( node, output )
  node.children.each { |child| write( child, output ) }
end

#write_element(node, output) (protected)

[ GitHub ]

  
# File 'lib/rexml/formatters/default.rb', line 64

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) (protected)

[ GitHub ]

  
# File 'lib/rexml/formatters/default.rb', line 103

def write_instruction( node, output )
  output << Instruction::START.sub(/\\/u, '')
  output << node.target
  output << ' '
  output << node.content
  output << Instruction::STOP.sub(/\\/u, '')
end

#write_text(node, output) (protected)

[ GitHub ]

  
# File 'lib/rexml/formatters/default.rb', line 87

def write_text( node, output )
  output << node.to_s()
end