Module: Quickbooks::Support

Defined in:
lib/quickbooks/ruby_ext.rb

Defined Under Namespace

Modules: Amount, Date, DateTime, Float, Integer, TimeInterval

Class Method Summary collapse

Class Method Details

.parse_xml(xml) ⇒ Object

Raises:

  • (RuntimeError)


135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/quickbooks/ruby_ext.rb', line 135

def self.parse_xml(xml)
  stack = []
  parser = REXML::Parsers::BaseParser.new(xml)
  while true
    event = parser.pull
    case event[0]
    when :end_document
      break
    when :end_doctype, :start_doctype
      # do nothing
    when :start_element
      stack.push(event[2].empty? ? QB[event[1]].instantiate : QB[event[1]].instantiate(event[2]))
    when :end_element
      if stack.size > 1
        temp = stack.pop
        stack.last.attributes << temp
      end
    when :text, :cdata
      stack.last.value = event[1].unescape_xml if stack.last.class < Quickbooks::Property
    end
  end
  obj = stack.pop
  raise RuntimeError, "Error while parsing xml response. XML:\n#{xml}" if obj.nil?
  obj.send(:clean!)
  obj
end