Annotation of foxridge-archiver/HarvestmetaHandler.pm, revision 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>