Annotation of foxridge-archiver/HarvestmetaHandler.pm, revision 1.1.1.1

1.1       casties     1: #
                      2: # SAX handler for harvestmeta
                      3: #
                      4: 
                      5: package HarvestmetaHandler;
                      6: 
                      7: use strict;
                      8: 
                      9: use base qw(XML::SAX::Base);
                     10: 
                     11: use lib '/usr/local/mpiwg/archive';
                     12: use MPIWGStor;
                     13: 
                     14: my @currElemPath;
                     15: my $currElem;
                     16: my $currText;
                     17: my $currAttrib;
                     18: my @elements;
                     19:   
                     20: sub getData {
                     21:     return @elements;
                     22: }
                     23: 
                     24: sub start_document {
                     25:     my ($self, $doc) = @_;
                     26:     # process document start event
                     27:     #logger('DEBUG', "startdoc: $self, $doc");
                     28:     @currElemPath = ();
                     29:     $currElem = "";
                     30:     $currText = "";
                     31:     $currAttrib ="";
                     32:     @elements = ();
                     33: }
                     34: 
                     35: sub start_element {
                     36:     my ($self, $el) = @_;
                     37:     # process element start event
                     38:     #logger('DEBUG', "startelem: $self, $el");
                     39:     # check if the last element needs to be finished
                     40:     if ($currElem) {
                     41:    my $elem = join "/", @currElemPath;
                     42:    push @elements, [$elem, "", $currAttrib];
                     43:     }
                     44:     # element name is either LocalName or Name
                     45:     my $name = $$el{'LocalName'};
                     46:     $name = $$el{'Name'} unless ($name);
                     47:     #logger('DEBUG', "  name: $name");
                     48:     # assemble attributes string
                     49:     $currAttrib ="";
                     50:     foreach $a (values %{$$el{'Attributes'}}) {
                     51:    my $n = $$a{'LocalName'};
                     52:    $n = $$a{'Name'} unless ($n);
                     53:    my $v = $$a{'Value'};
                     54:    $currAttrib .= "$n=\"$v\" ";
                     55:     }
                     56:     # start element name
                     57:     push @currElemPath, $name;
                     58:     $currElem = $name;
                     59:     $currText = "";
                     60: }
                     61: 
                     62: sub end_element {
                     63:     my ($self, $el) = @_;
                     64:     # process element end event
                     65:     #logger('DEBUG', "endelem: $self, $el");
                     66:     # check element name
                     67:     my $name = $$el{'LocalName'};
                     68:     $name = $$el{'Name'} unless ($name);
                     69:     my $lastag = $currElemPath[$#currElemPath];
                     70:     if ($lastag ne $name) {
                     71:    logger('ERROR', "closing tag '$lastag' doesn't match '$name'!");
                     72:     }
                     73:     # assemble element path
                     74:     my $elem = join "/", @currElemPath;
                     75:     # strip whitespace from element content
                     76:     $currText =~ s/^\s*//;
                     77:     $currText =~ s/\s*$//;
                     78:     if ($currText) {
                     79:    # put pair in elements array
                     80:    push @elements, [$elem, $currText, $currAttrib];
                     81:    #logger('DEBUG', "  elem: $elem = $currText");
                     82:     }
                     83:     # end element name
                     84:     pop @currElemPath;
                     85:     $currElem = "";
                     86:     $currText = "";
                     87:     $currAttrib ="";
                     88: }
                     89: 
                     90: sub characters {
                     91:     my ($self, $char) = @_;
                     92:     # process character data event
                     93:     #logger('DEBUG', "characters: $self, $char");
                     94:     # add to current content
                     95:     $currText .= $$char{'Data'};
                     96:     #logger('DEBUG', " Text: $currText");
                     97: }
                     98: 
                     99: 
                    100: 1;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>