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 id_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 10
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 <<. Pass in an Output object to change the output encoding.

# File lib/rexml/formatters/default.rb, line 21
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 96
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 90
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 59
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 63
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 102
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 ) click to toggle source
# File lib/rexml/formatters/default.rb, line 86
def write_text( node, output )
 output << node.to_s()
end