# # Copyright 2002,2004 The Apache Software Foundation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ###################################################################### # # SAXCount # # This sample is modeled after its Xerces-C counterpart. You give it an # XML file and it parses it with a SAX parser and counts what it sees. # ###################################################################### use strict; # use blib; use XML::Xerces; use Getopt::Long; use vars qw($opt_v $opt_n); use Benchmark; # # Read and validate command line args # my $USAGE = <new(); $parser->setValidationScheme ($validate); $parser->setDoNamespaces ($namespace); $parser->setDoSchema ($schema); my $ERROR_HANDLER = XML::Xerces::PerlErrorHandler->new(); $parser->setErrorHandler($ERROR_HANDLER); package MyDocumentHandler; use strict; use vars qw(@ISA); @ISA = qw(XML::Xerces::PerlDocumentHandler); sub start_element { my ($self,$name,$attrs) = @_; $self->{elements}++; $self->{attrs} += $attrs->getLength(); } sub end_element { my ($self,$name) = @_; } sub characters { my ($self,$str,$len) = @_; $self->{chars} += $len; } sub ignorable_whitespace { my ($self,$str,$len) = @_; $self->{ws} += $len; } package main; my $DOCUMENT_HANDLER = MyDocumentHandler->new(); $parser->setDocumentHandler($DOCUMENT_HANDLER); $DOCUMENT_HANDLER->{elements} = 0; $DOCUMENT_HANDLER->{attrs} = 0; $DOCUMENT_HANDLER->{ws} = 0; $DOCUMENT_HANDLER->{chars} = 0; my $t0 = new Benchmark; eval { $parser->parse (XML::Xerces::LocalFileInputSource->new($file)); }; XML::Xerces::error($@) if ($@); my $t1 = new Benchmark; my $td = timediff($t1, $t0); print "$file: duration: ", timestr($td), "\n"; print "elems: ", $DOCUMENT_HANDLER->{elements}, "\n"; print "attrs: ", $DOCUMENT_HANDLER->{attrs}, "\n"; print "whitespace: ", $DOCUMENT_HANDLER->{ws}, "\n"; print "characters: ", $DOCUMENT_HANDLER->{chars}, "\n"; exit(0); END { # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate() # when the module is unloaded. Xerces.pm no longer does this for us # # XML::Xerces::XMLPlatformUtils::Terminate(); }