File Coverage

blib/lib/Catmandu/Importer/MARC/XML.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             =head1 NAME
2              
3             Catmandu::Importer::MARC::XML - Package that imports MARCXML records
4              
5             =head1 SYNOPSIS
6              
7             # From the command line
8             $ catmandu convert MARC --type XML --fix "marc_map('245a','title')" < /foo/data.xml
9              
10             # From perl
11             use Catmandu;
12              
13             # import records from file
14             my $importer = Catmandu->importer('MARC',file => '/foo/data.xml', type => 'XML');
15             my $fixer = Catmandu->fixer("marc_map('245a','title')");
16              
17             $importer->each(sub {
18             my $item = shift;
19             ...
20             });
21              
22             # or using the fixer
23              
24             $fixer->fix($importer)->each(sub {
25             my $item = shift;
26             printf "title: %s\n" , $item->{title};
27             });
28              
29             =head1 CONFIGURATION
30              
31             =over
32              
33             =item id
34              
35             The MARC field which contains the system id (default: 001)
36              
37             =item file
38              
39             Read input from a local file given by its path. Alternatively a scalar
40             reference can be passed to read from a string.
41              
42             =item fh
43              
44             Read input from an L<IO::Handle>. If not specified, L<Catmandu::Util::io> is used to
45             create the input stream from the C<file> argument or by using STDIN.
46              
47             =item encoding
48              
49             Binmode of the input stream C<fh>. Set to C<:utf8> by default.
50              
51             =item fix
52              
53             An ARRAY of one or more fixes or file scripts to be applied to imported items.
54              
55             =back
56              
57             =head1 METHODS
58              
59             Every Catmandu::Importer is a Catmandu::Iterable all its methods are inherited.
60              
61             =head1 SEE ALSO
62              
63             L<Catmandu::Importer>,
64             L<Catmandu::Iterable>
65              
66             =cut
67             package Catmandu::Importer::MARC::XML;
68 12     12   6591 use Catmandu::Sane;
  12         30  
  12         121  
69 12     12   2594 use Moo;
  12         27  
  12         76  
70 12     12   7664 use Catmandu::Importer::MARC::Decoder;
  12         31  
  12         418  
71 12     12   3731 use MARC::File::XML (BinaryEncoding => 'UTF-8', DefaultEncoding => 'UTF-8', RecordFormat => 'MARC21');
  0            
  0            
72              
73             our $VERSION = '1.20';
74              
75             with 'Catmandu::Importer';
76              
77             has id => (is => 'ro' , default => sub { '001' });
78             has decoder => (
79             is => 'ro',
80             lazy => 1 ,
81             builder => sub {
82             Catmandu::Importer::MARC::Decoder->new;
83             } );
84              
85             sub generator {
86             my ($self) = @_;
87             my $file = MARC::File::XML->in($self->fh);
88              
89             # MARC::File doesn't provide support for inline files
90             $file = $self->decoder->fake_marc_file($self->fh,'MARC::File::XML') unless $file;
91              
92             sub {
93             $self->decoder->decode($file->next(),$self->id);
94             }
95             }
96              
97             1;