1242: def parseparse
1243: @started = false
1244:
1245: parser = XMLParser.new("UTF-8")
1246: def parser.unknownEncoding(e)
1247: raise "Unknown encoding #{e.to_s}"
1248: end
1249: def parser.default
1250: end
1251:
1252: begin
1253: parser.parse(@stream) do |type, name, data|
1254: begin
1255: case type
1256: when XMLParser::START_ELEM
1257: case name
1258: when "stream:stream"
1259: openstream = ParsedXMLElement.new(name)
1260: data.each {|key, value| openstream.add_attribute(key, value)}
1261: @listener.receive(openstream)
1262: @started = true
1263: else
1264: if @current.nil?
1265: @current = ParsedXMLElement.new(name.clone)
1266: else
1267: @current = @current.add_child(name.clone)
1268: end
1269: data.each {|key, value| @current.add_attribute(key.clone, value.clone)}
1270: end
1271: when XMLParser::CDATA
1272: @current.append_data(data.clone) if @current
1273: when XMLParser::END_ELEM
1274: case name
1275: when "stream:stream"
1276: @started = false
1277: else
1278: @listener.receive(@current) unless @current.element_parent
1279: @current = @current.element_parent
1280: end
1281: end
1282: rescue
1283: puts "Error #{$!}"
1284: end
1285: end
1286: rescue XMLParserError
1287: line = parser.line
1288: print "XML Parsing error(#{line}): #{$!}\n"
1289: end
1290: end