def validate( event )
@attr_stack = [] unless defined? @attr_stack
match = @current[ event ]
raise ValidationException.new( "Validation error. Expected: "+
@current.keys.collect{|e| e.inspect }.join(" or ")+
" but got #{Event.new( event[0], event[1] ).inspect}" ) unless match
@current = match
case event[0]
when :start_element
@attr_stack << event[2]
begin
sattr = [:start_attribute, nil]
eattr = [:end_attribute]
text = [:text, nil]
k,v = event[2].find { |k,v|
sattr[1] = k
m = @current[ sattr ]
if m
if m[ eattr ]
@current = m
else
text[1] = v
m = m[ text ]
text[1] = nil
@current = m if m
end
m = @current[ eattr ]
if m
@current = m
true
else
false
end
else
false
end
}
event[2].delete(k) if k
end while k
when :end_element
attrs = @attr_stack.pop
raise ValidationException.new( "Validation error. Illegal "+
" attributes: #{attrs.inspect}") if attrs.length > 0
end
end