def tag_start(name, attrs)
@ns_map.start_element
for attr_name, attr_value in attrs
case (attr_name)
when /^xmlns($|:)/
xmlns, prefix = attr_name.split(/:/, 2)
prefix = '' unless prefix
ns_uri = attr_value
@ns_map.add_ns(prefix, ns_uri)
else
end
end
attr_map = XMLAttributeMap.new
for attr_name, attr_value in attrs
case (attr_name)
when /^xmlns($|:)/
else
if (attr_name =~ /:/) then
prefix, ns_attr_name = attr_name.split(/:/, 2)
unless (@ns_map[prefix]) then
raise "not defined a XML namespace prefix: #{prefix.inspect}"
end
attr_map.add_attr(@ns_map[prefix], prefix, ns_attr_name, attr_value)
else
attr_map.add_attr('', '', attr_name, attr_value)
end
end
end
if (name =~ /:/) then
prefix, elem_name = name.split(/:/, 2)
else
prefix = ''
elem_name = name
end
unless (@ns_map[prefix]) then
raise "not defined a XML namespace prefix: #{prefix.inspect}"
end
@reader.start_element(@ns_map[prefix], prefix, elem_name, attr_map)
end