# File lib/xml/parserns.rb, line 31
    def parse(*args)
      if block_given?
        super do |nodetype, name, args, parser|
          case nodetype
          when START_ELEM
            ns, args = getNSAttrs(args)
            @ns.push(ns)
            if @nssep
              if @parserNS.respond_to?(:startNamespaceDecl)
                ns.each do |prefix, uri|
                  yield(START_NAMESPACE_DECL, prefix, uri, parser)
                end
              end

              prefix, uri, localpart = resolveElementQName(name)
              name = uri + @nssep + name if uri
              attrs = {}
              args.each do |k, v|
                prefix, uri, localpart = resolveAttributeQName(k)
                k = uri + @nssep + k if uri
                attrs[k] = v
              end
              args = attrs
            end
            yield(nodetype, name, args, parser)
          when END_ELEM
            if @nssep
              prefix, uri, localpart = resolveElementQName(name)
              name = uri + @nssep + name if uri
            end
            yield(nodetype, name, args, parser)
            ns = @ns.pop
            if @nssep and @parserNS.respond_to?(:endNamespaceDecl)
              ns.to_a.reverse.each do |prefix, uri|
                yield(END_NAMESPACE_DECL, prefix, nil, parser)
              end
            end
          else
            yield(nodetype, name, args, parser)
          end
        end
      else
        super
      end
    end