Sha256: 0128f93557289491ccbfb2ab7e5ee3810ab80b51729e3a0caa88f6b6e264bfc1

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

require File.dirname(__FILE__) + "/node_visitor"

class XmlVisitor < NodeVisitor
  
  attr_reader :document
  
  def initialize
    @document = ""
  end
  
  def process_before_children(node)
    if (node.is_a?(String))
      @document << node
      return
    end
    begin_open_tag(node)
    append_attributes(node) if node.attributes
    end_open_tag(node)
  end
  
  def process_after_children(node)
    return if (node.is_a?(String))
    append_close_tag(node)
  end
  
  def begin_open_tag(node)
    @document << "<"
    @document << "#{node.name_space.name}:" if node.name_space
    @document << node.name
  end
  
  def end_open_tag(node)
    if (node.contents) 
      @document << ">"
    else
      @document << " " if node.attributes.keys.size > 0
      @document << "/>"
    end
  end
  
  def append_close_tag(node)
    if (node.contents)
      @document << "</"
      @document << "#{node.name_space.name}:" if node.name_space
      @document << "#{node.name}>"
    end
  end
  
  def append_attributes(node)
    Glimmer.logger.debug "Take 3"
    p node.attributes
    node.attributes.each_key do |attribute|
      attribute_name = attribute
      attribute_name = "#{attribute.name_space.name}:#{attribute.name}" if attribute.is_a?(Node)
      @document << " #{attribute_name}=\"#{node.attributes[attribute]}\""
    end
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
glimmer-0.1.5.470 lib/xml_command_handlers/models/xml_visitor.rb