File Coverage

blib/lib/HTTP/OAI/Metadata/METS.pm
Criterion Covered Total %
statement 31 31 100.0
branch n/a
condition n/a
subroutine 6 6 100.0
pod 0 2 0.0
total 37 39 94.8


line stmt bran cond sub pod time code
1             package HTTP::OAI::Metadata::METS;
2              
3 1     1   365 use XML::LibXML;
  1         2  
  1         5  
4 1     1   123 use XML::LibXML::XPathContext;
  1         1  
  1         28  
5              
6             @ISA = qw( HTTP::OAI::Metadata );
7              
8 1     1   4 use strict;
  1         1  
  1         282  
9              
10             our $VERSION = '4.12';
11              
12             sub new {
13 1     1 0 1 my $class = shift;
14 1         8 my $self = $class->SUPER::new(@_);
15 1         2 my %args = @_;
16 1         4 $self;
17             }
18              
19             sub _xc
20             {
21 5     5   157 my $xc = XML::LibXML::XPathContext->new( @_ );
22 5         34 $xc->registerNs( 'oai_dc', HTTP::OAI::OAI_NS );
23 5         13 $xc->registerNs( 'mets', 'http://www.loc.gov/METS/' );
24 5         13 $xc->registerNs( 'xlink', 'http://www.w3.org/1999/xlink' );
25 5         8 return $xc;
26             }
27              
28             sub files
29             {
30 1     1 0 9 my $self = shift;
31 1         5 my $dom = $self->dom;
32              
33 1         9 my $xc = _xc($dom);
34              
35 1         2 my @files;
36 1         4 foreach my $file ($xc->findnodes( '*//mets:file' ))
37             {
38 4         96 my $f = {};
39 4         10 foreach my $attr ($file->attributes)
40             {
41 28         134 $f->{ $attr->nodeName } = $attr->nodeValue;
42             }
43 4         17 $file = _xc($file);
44 4         11 foreach my $locat ($file->findnodes( 'mets:FLocat' ))
45             {
46 4         118 $f->{ url } = $locat->getAttribute( 'xlink:href' );
47             }
48 4         49 push @files, $f;
49             }
50              
51 1         14 return @files;
52             }
53              
54             1;
55              
56             __END__