MS

 view release on metacpan or  search on metacpan

lib/MS/Reader/XML/Record.pm  view on Meta::CPAN

        # criteria. In some cases this can speed up sequential parsing
        # significantly
        if ($el eq 'cvParam' && defined $self->{filter}) {
            if ($id eq $self->{filter}->[0]
            && $attrs{value} != $self->{filter}->[1]) {
                $self->{filtered} = 1;

                # remove circular references
                delete $self->{_curr_ref}->{back};
                delete $new_ref->{back};

                $p->finish;
            }
        }

    }

    # Elements that should be grouped by name/id
    elsif (defined $self->{_make_named_hash}->{ $el }) {
        my $id_name = $self->{_make_named_hash}->{ $el };
        my $id = $attrs{$id_name};
        die "Colliding ID $id"
            if (defined $self->{_curr_ref}->{$el}->{$id});
        delete $new_ref->{$id_name};
        $self->{_curr_ref}->{$el}->{$id} = $new_ref;
    }

    # Elements that should be grouped with no name
    elsif (defined $self->{_make_anon_array}->{ $el } ) {
        push @{ $self->{_curr_ref}->{$el} }, $new_ref;
    }

    # Everything else
    else {  
        $self->{_curr_ref}->{$el} = $new_ref;
    }

    # Step up linked list
    $self->{_curr_ref} = $new_ref;

    return;

}

sub _handle_end {

    my ($self, $p, $el) = @_;

    # step back down linked list
    my $last_ref = $self->{_curr_ref}->{back};
    delete $self->{_curr_ref}->{back}; # avoid memory leak!
    $self->{_curr_ref} = $last_ref;

    return;

}

sub _handle_char {

    my ($self, $p, $data) = @_;
    $self->{_curr_ref}->{pcdata} .= $data
        if ($data =~ /\S/);
    return;

}

sub dump {

    my ($self) = @_;
    my $copy = {};
    %$copy = %$self;

    delete $copy->{$_} 
        for qw/count md5sum version fh offsets fn index fh pos lengths/;

    my $dump = '';

    {
        local $Data::Dumper::Indent   = 1;
        local $Data::Dumper::Terse    = 1;
        local $Data::Dumper::Sortkeys = 1;
        $dump =  Dumper $copy;
    }

    return $dump;

}

sub _pre_load {} # can be defined by subclass
sub _post_load {} # can be defined by subclass

1;


__END__

=head1 NAME

MS::Reader::XML::Record - Base class for XML-based records

=head1 SYNOPSIS

    package MS::Reader::Foo::Record;

    use parent MS::Reader::XML::Record;

=head1 METHODS

=head2 dump

    my $dump = $spectrum->dump;

Returns a textual representation (via C<Data::Dumper>) of the data structure.
This can facilitate access to data parsed from the MGF record but not
accessible via an accessor method.

=head1 CAVEATS AND BUGS

The API is in alpha stage and is not guaranteed to be stable.

Please reports bugs or feature requests through the issue tracker at



( run in 0.406 second using v1.01-cache-2.11-cpan-39bf76dae61 )