File:  [Repository] / foxridge-archiver / HarvestmetaHandler.pm
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Thu Jun 17 15:58:42 2004 UTC (20 years ago) by casties
Branches: MAIN
CVS tags: HEAD
Initial revision

    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>