@private
@param [Hash] rules A hash of parser rules. These
rules are typically generated by an {XML::Grammar}.
# File lib/aws/core/xml/frame_stack.rb, line 23 def initialize rules @frame = RootFrame.new(rules) end
Increase the frame stack level by one by treating xml element attributes as nested elements. @param [Hash] attributes A hash of attributes names to values. @return [nil]
# File lib/aws/core/xml/frame_stack.rb, line 54 def attributes attributes attributes.each_pair do |attr_name, attr_value| attr_frame = @frame.build_child_frame(attr_name) attr_frame.add_text(attr_value) @frame.consume_child_frame(attr_frame) end nil end
Pops the top frame off the stack. When closing frames their final value is computed. @overload #end_element @return [nil]
# File lib/aws/core/xml/frame_stack.rb, line 67 def end_element *ignored parent = @frame.parent_frame child = @frame parent.consume_child_frame(child) @frame = @frame.parent_frame nil end
Parses the xml string and returns a hash with the resutls. @param [String] xml @return [Hash]
# File lib/aws/core/xml/frame_stack.rb, line 35 def parse xml sax_parse(xml) @frame.value end
Increase the frame stack level by one. @param [String] element_name The name of the xml opening tag. @param [Hash] attributes A hash of xml element attributes. @return [nil]
# File lib/aws/core/xml/frame_stack.rb, line 44 def start_element element_name, attributes = {} @frame = @frame.build_child_frame(element_name) self.attributes(attributes) nil end
Adds text to the current frame. Frames that only contain text and no child elements are leaf nodes and have raw string values.
# File lib/aws/core/xml/frame_stack.rb, line 78 def text text @frame.add_text(text) if @frame end
# File lib/aws/core/xml/frame_stack.rb, line 27 def sax_parse xml raise NotImplementedError end