Depending on when you process the XML, the annoying characters may be escaped
authordbs <dbs@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Thu, 30 Apr 2009 15:23:38 +0000 (15:23 +0000)
committerdbs <dbs@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Thu, 30 Apr 2009 15:23:38 +0000 (15:23 +0000)
git-svn-id: svn://svn.open-ils.org/ILS-Contrib/conifer/trunk@424 6d9bc8c9-1ec2-4278-b937-99fde70a366f

tools/migration-scripts/fix_bad_marcxml.pl

index 20f174c..2e45dbd 100644 (file)
@@ -33,15 +33,18 @@ sub process_file {
                #  </datafield>
                #
                # This will at least enable MARC::File::XML to process it:
-               if ($_ =~ m#<subfield code=""">#o) {
+               if ($_ =~ m#<subfield code=""">#o or $_ =~ m#<subfield code="&quot;">#o ) {
                        print STDERR "Bad subfield code \" at line $lineno of file $file\n";
                        $_ =~ s{<subfield code=""">}{<subfield code="Z">}o;
-               } elsif ($_ =~ m#<subfield code="<">#o) {
+                       $_ =~ s{<subfield code="&quot;">}{<subfield code="Z">}o;
+               } elsif ($_ =~ m#<subfield code="<">#o or $_ =~ m#<subfield code="&lt;">#o) {
                        print STDERR "Bad subfield code < at line $lineno of file $file\n";
                        $_ =~ s{<subfield code="<">}{<subfield code="Z">}o;
-               } elsif ($_ =~ m#<subfield code="&">#o) {
+                       $_ =~ s{<subfield code="&lt;">}{<subfield code="Z">}o;
+               } elsif ($_ =~ m#<subfield code="&">#o or $_ =~ m#<subfield code="&amp;">#o) {
                        print STDERR "Bad subfield code & at line $lineno of file $file\n";
                        $_ =~ s{<subfield code="&">}{<subfield code="Z">}o;
+                       $_ =~ s{<subfield code="&amp;">}{<subfield code="Z">}o;
                } elsif ($_ =~ m#<datafield tag="(\d)" ind1="."#o) {
                        my $badtag = $1;
                        print STDERR "Bad datafield tag $badtag at line $lineno of file $file\n";