Changeset 9957
- Timestamp:
- 2005-05-25T17:30:23+12:00 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gsdl/perllib/plugins/XMLPlug.pm
r9853 r9957 41 41 'type' => "regexp", 42 42 'deft' => &get_default_process_exp(), 43 'reqd' => "no" }, 44 { 'name' => "xslt", 45 'desc' => "{XMLPlug.xslt}", 46 'type' => "string", 47 'deft' => "", 43 48 'reqd' => "no" } ]; 44 49 … … 61 66 push( @{$option_list}, $options ); 62 67 68 if (!parsargv::parse(\@_, 69 q^xslt/.*/^, \$self->{'xslt'}, 70 "allow_extra_options")) { 71 72 print STDERR "\nIncorrect options passed to XSLTPlug, check your collect.cfg configuration file\n"; 73 $self->print_txt_usage(""); # Use default resource bundle 74 die "\n"; 75 } 76 77 63 78 my $parser = new XML::Parser('Style' => 'Stream', 64 79 'Handlers' => {'Char' => \&Char, … … 76 91 } 77 92 93 sub apply_xslt 94 { 95 my $self = shift @_; 96 my ($xslt,$filename) = @_; 97 98 my $outhandle = $self->{'outhandle'}; 99 100 my $xslt_filename = $xslt; 101 102 if (! -e $xslt_filename) { 103 # Look in main site directory 104 my $gsdlhome = $ENV{'GSDLHOME'}; 105 $xslt_filename = &util::filename_cat($gsdlhome,$xslt); 106 } 107 108 if (! -e $xslt_filename) { 109 # Look in collection directory 110 my $coldir = $ENV{'COLLECTDIR'}; 111 $xslt_filename = &util::filename_cat($coldir,$xslt); 112 } 113 114 if (! -e $xslt_filename) { 115 print $outhandle "Warning: Unable to find XSLT $xslt\n"; 116 if (open(XMLIN,"<$filename")) { 117 118 $untransformed_xml = ""; 119 while (defined (my $line = <XMLIN>)) { 120 121 $untransformed_xml .= $line; 122 } 123 close(XMLIN); 124 125 return $untransformed_xml; 126 } 127 else { 128 print $outhandle "Error: Unable to open file $filename\n"; 129 print $outhandle " $!\n"; 130 return ""; 131 } 132 133 } 134 135 my $bin_java = &util::filename_cat($ENV{'GSDLHOME'},"bin","java"); 136 my $jar_filename = &util::filename_cat($bin_java,"xalan.jar"); 137 my $xslt_base_cmd = "java -jar $jar_filename"; 138 my $xslt_cmd = "$xslt_base_cmd -IN \"$filename\" -XSL \"$xslt_filename\""; 139 140 my $transformed_xml = ""; 141 142 if (open(XSLT_IN,"$xslt_cmd |")) { 143 while (defined (my $line = <XSLT_IN>)) { 144 145 $transformed_xml .= $line; 146 } 147 close(XSLT_IN); 148 } 149 else { 150 print $outhandle "Error: Unable to run command $xsl_cmd\n"; 151 print $outhandle " $!\n"; 152 } 153 154 return $transformed_xml; 155 156 } 157 78 158 79 159 sub read { 80 # this must be global!160 # $self must be global to work with XML callback routines. 81 161 $self = shift (@_); 82 162 … … 93 173 return undef; 94 174 } 175 95 176 $file =~ s/^[\/\\]+//; # $file often begins with / so we'll tidy it up 96 177 $self->{'file'} = $file; … … 99 180 $self->{'metadata'} = $metadata; 100 181 $self->{'gli'} = $gli; 182 101 183 eval { 102 $self->{'parser'}->parsefile($filename); 184 my $xslt = $self->{'xslt'}; 185 if (defined $xslt && ($xslt ne "")) { 186 # perform xslt 187 my $transformed_xml = $self->apply_xslt($xslt,$filename); 188 189 # feed transformed file (now in memory as string) into XML parser 190 $self->{'parser'}->parse($transformed_xml); 191 } 192 else { 193 $self->{'parser'}->parsefile($filename); 194 } 103 195 }; 104 196 … … 126 218 return -1; # error during processing 127 219 } 220 128 221 return 1; # processed the file 129 222 }
Note:
See TracChangeset
for help on using the changeset viewer.