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 12

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 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

#write_cdata(node, output) (protected)

[ GitHub ]

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

[ GitHub ]

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

[ GitHub ]

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

[ GitHub ]

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

[ GitHub ]

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

[ GitHub ]

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

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