def start_element(name, raw_attrs)
lastframe = @parsestack.last
ns = parent = parent_encodingstyle = nil
if lastframe
ns = lastframe.ns
parent = lastframe.node
parent_encodingstyle = lastframe.encodingstyle
else
ns = SOAP::NS.new
parent = ParseFrame::NodeContainer.new(nil)
parent_encodingstyle = nil
end
ns, raw_attrs = XSD::XMLParser.filter_ns(ns, raw_attrs)
attrs = decode_attrs(ns, raw_attrs)
encodingstyle = attrs[AttrEncodingStyleName]
if encodingstyle.nil?
if parent.node.is_a?(SOAPHeader)
encodingstyle = LiteralNamespace
else
encodingstyle = parent_encodingstyle || @default_encodingstyle
end
end
handler = find_handler(encodingstyle)
unless handler
raise FormatDecodeError.new("Unknown encodingStyle: #{ encodingstyle }.")
end
node = decode_tag(ns, name, attrs, parent, handler)
if @recycleframe
@parsestack << @recycleframe.update(ns, name, node, encodingstyle, handler)
@recycleframe = nil
else
@parsestack << ParseFrame.new(ns, name, node, encodingstyle, handler)
end
end