Annotation of foxridge-archiver/HarvestmetaHandler.pm, revision 1.4
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:
1.3 casties 11: use lib '/usr/local/mpiwg/archive';
1.1 casties 12: use MPIWGStor;
13:
1.2 casties 14: my $debugElem = 0;
15: my $debugCont = 0;
16:
1.1 casties 17: my @currElemPath;
18: my $currElem;
19: my $currText;
20: my $currAttrib;
21: my @elements;
1.2 casties 22:
1.1 casties 23: sub getData {
24: return @elements;
25: }
26:
27: sub start_document {
28: my ($self, $doc) = @_;
29: # process document start event
1.2 casties 30: logger('DEBUG', "startdoc: $self, $doc") if ($debugElem);
1.1 casties 31: @currElemPath = ();
32: $currElem = "";
33: $currText = "";
34: $currAttrib ="";
35: @elements = ();
36: }
37:
38: sub start_element {
39: my ($self, $el) = @_;
40: # process element start event
1.2 casties 41: logger('DEBUG', "startelem: $self, $$el{'LocalName'}") if ($debugElem);
1.1 casties 42: # check if the last element needs to be finished
43: if ($currElem) {
44: my $elem = join "/", @currElemPath;
45: push @elements, [$elem, "", $currAttrib];
46: }
47: # element name is either LocalName or Name
1.4 ! casties 48: my $name = $$el{'LocalName'} or $$el{'Name'};
1.1 casties 49: #logger('DEBUG', " name: $name");
50: # assemble attributes string
1.4 ! casties 51: $currAttrib = "";
1.2 casties 52: foreach my $attr (values %{$$el{'Attributes'}}) {
1.4 ! casties 53: my $key = $$attr{'LocalName'} or $$attr{'Name'};
1.2 casties 54: my $val = $$attr{'Value'};
55: $currAttrib .= "$key=\"$val\" ";
1.1 casties 56: }
1.2 casties 57: $currAttrib = sstrip($currAttrib);
1.1 casties 58: # start element name
59: push @currElemPath, $name;
60: $currElem = $name;
61: $currText = "";
62: }
63:
64: sub end_element {
65: my ($self, $el) = @_;
66: # process element end event
1.2 casties 67: logger('DEBUG', "endelem: $self, $$el{'LocalName'}") if ($debugElem);
1.1 casties 68: # check element name
1.4 ! casties 69: my $name = $$el{'LocalName'} or $$el{'Name'};
1.1 casties 70: my $lastag = $currElemPath[$#currElemPath];
71: if ($lastag ne $name) {
72: logger('ERROR', "closing tag '$lastag' doesn't match '$name'!");
73: }
74: # assemble element path
75: my $elem = join "/", @currElemPath;
76: # strip whitespace from element content
77: $currText =~ s/^\s*//;
78: $currText =~ s/\s*$//;
1.2 casties 79: if (($currText)||($currAttrib)) {
1.1 casties 80: # put pair in elements array
81: push @elements, [$elem, $currText, $currAttrib];
1.2 casties 82: logger('DEBUG', " elem: $elem = $currText ($currAttrib)") if ($debugCont);
1.1 casties 83: }
84: # end element name
85: pop @currElemPath;
86: $currElem = "";
87: $currText = "";
88: $currAttrib ="";
89: }
90:
91: sub characters {
92: my ($self, $char) = @_;
93: # process character data event
1.4 ! casties 94: logger('DEBUG', "characters: $self, $char") if ($debugElem > 1);
1.1 casties 95: # add to current content
96: $currText .= $$char{'Data'};
1.4 ! casties 97: logger('DEBUG', " Text: $currText") if ($debugCont > 1);
1.1 casties 98: }
99:
100:
101: 1;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>