egdb3_11_7
.vandelay
Tables
(current)
Columns
Constraints
Relationships
Orphan Tables
Anomalies
Routines
strip_field(xml text, field text)
Parameters
Name
Type
Mode
xml
text
IN
field
text
IN
Definition
use MARC::Record; use MARC::File::XML (BinaryEncoding => 'UTF-8'); use MARC::Charset; use strict; MARC::Charset->assume_unicode(1); my $xml = shift; my $r = MARC::Record->new_from_xml( $xml ); return $xml unless ($r); my $field_spec = shift; my @field_list = split(',', $field_spec); my %fields; for my $f (@field_list) { $f =~ s/^\s*//; $f =~ s/\s*$//; if ($f =~ /^(.{3})(\w*)(?:\[([^]]*)\])?$/) { my $field = $1; $field =~ s/\s+//; my $sf = $2; $sf =~ s/\s+//; my $matches = $3; $matches =~ s/^\s*//; $matches =~ s/\s*$//; $fields{$field} = { sf => [ split('', $sf) ] }; if ($matches) { for my $match (split('&&', $matches)) { $match =~ s/^\s*//; $match =~ s/\s*$//; my ($msf,$mre) = split('~', $match); if (length($msf) > 0 and length($mre) > 0) { $msf =~ s/^\s*//; $msf =~ s/\s*$//; $mre =~ s/^\s*//; $mre =~ s/\s*$//; $fields{$field}{match}{$msf} = qr/$mre/; } } } } } for my $f ( keys %fields) { for my $to_field ($r->field( $f )) { if (exists($fields{$f}{match})) { my @match_list = grep { $to_field->subfield($_) =~ $fields{$f}{match}{$_} } keys %{$fields{$f}{match}}; next unless (scalar(@match_list) == scalar(keys %{$fields{$f}{match}})); } if ( @{$fields{$f}{sf}} ) { $to_field->delete_subfield(code => $fields{$f}{sf}); } else { $r->delete_field( $to_field ); } } } $xml = $r->as_xml_record; $xml =~ s/^<\?.+?\?>$//mo; $xml =~ s/\n//sgo; $xml =~ s/>\s+</></sgo; return $xml;