Avoid XSLT stylesheet building for each biblio record to transform
authorFrederic Demians <f.demians@tamil.fr>
Thu, 5 Feb 2009 07:26:13 +0000 (08:26 +0100)
committerGalen Charlton <galen.charlton@liblime.com>
Mon, 9 Feb 2009 20:06:57 +0000 (14:06 -0600)
In XSLT.pm, put XSLT stylesheet object in a session variable in order
to avoid to build it for each biblio to parse: useful on search
result page.

Signed-off-by: Galen Charlton <galen.charlton@liblime.com>
C4/XSLT.pm

index eeb2ec7..1bea9f1 100644 (file)
@@ -106,6 +106,8 @@ sub getAuthorisedValues4MARCSubfields {
     return \@results;
 }
 
+my $stylesheet;
+
 sub XSLTParse4Display {
     my ($biblionumber,$xslfile) = @_;
     # grab the XML, run it through our stylesheet, push it out to the browser
@@ -116,10 +118,12 @@ sub XSLTParse4Display {
     my $parser = XML::LibXML->new();
     # don't die when you find &, >, etc
     $parser->recover_silently(1);
-    my $xslt = XML::LibXSLT->new();
     my $source = $parser->parse_string($xmlrecord);
-    my $style_doc = $parser->parse_file($xslfile);
-    my $stylesheet = $xslt->parse_stylesheet($style_doc);
+    unless ( $stylesheet ) {
+        my $xslt = XML::LibXSLT->new();
+        my $style_doc = $parser->parse_file($xslfile);
+        $stylesheet = $xslt->parse_stylesheet($style_doc);
+    }
     my $results = $stylesheet->transform($source);
     my $newxmlrecord = $stylesheet->output_string($results);
     return $newxmlrecord;