Skip to content

gitpan/XML-LibXSLT-Processor

Repository files navigation

NAME
    XML::LibXSLT::Processor - XSLT processor based on libxslt with
    additional features

SYNOPSIS
        use XML::LibXML;
        use XML::LibXSLT::Processor;

        my $xsltproc = XML::LibXSLT::Processor->new();
        my $xml = XML::LibXML->load_xml(location => 'foo.xml');
        my $result = $xsltproc->transform($xml, 'bar.xsl' => { param => 1 });
        print $result->output_string();

    Multi-pass transform:

        my $result = $xsltproc->transform($xml,
            'style1.xsl' => { param => 1 },
            'style2.xsl' => { param => 1 },
            ...
        );

DESCRIPTION
    This processor caches templates, documents and keys, which leads to the
    acceleration of the transformation, as well as much more.

    Transformation benchmark:

        Test small xml:
                                   Rate            XML::LibXSLT XML::LibXSLT::Processor
        XML::LibXSLT            14493/s                      --                    -35%
        XML::LibXSLT::Processor 22222/s                     53%                      --

        Test big xml:
                                 Rate            XML::LibXSLT XML::LibXSLT::Processor
        XML::LibXSLT            823/s                      --                     -3%
        XML::LibXSLT::Processor 851/s                      3%                      --

    Using the key() function:

        First run:
                                                 Rate Search by key (not cached) Search by key (cached) Sequential search
        Search by key (not cached)             20.0/s                         --                   -40%             -100%
        Search by key (cached)                 33.3/s                        67%                     --             -100%
        Sequential search                          --                         --                     --                --

        Second run:
                                      Rate Search by key (not cached) Sequential search Search by key (cached)
        Search by key (not cached)  31.5/s                         --              -88%                  -100%
        Sequential search            254/s                       706%                --                   -99%
        Search by key (cached)     20000/s                     63440%             7780%                     --

    Using the document() function:

                                  Rate XML::LibXSLT Processor (Not cached) Processor (Cached)
        XML::LibXSLT            7092/s           --                   -32%               -65%
        Processor (Not cached) 10417/s          47%                     --               -48%
        Processor (Cached)     20000/s         182%                    92%                 --

    Using profiler:

        my $xsltproc = XML::LibXSLT::Processor->new(
            profiler_enable => 1,
            profiler_repeat => 20,
        );
        my $result = $xsltproc->transform('t/files/test1.xml',
            't/files/multi-transform1.xsl' => { pass => "1" },
            't/files/multi-transform2.xsl' => { pass => "2" },
        );
        print $result->profiler_result->toString(2);

        <profiler repeat="20">
          <stylesheet uri="t/files/multi-transform1.xsl" time="196">
            <profile>
              <template rank="1" match="/" name="" mode="" calls="20" time="13" average="0"/>
            </profile>
            <document>
              <root>
                <pass1>1</pass1>
              </root>
            </document>
            <params>
              <param name="pass" value="1"/>
            </params>
          </stylesheet>
          <stylesheet uri="t/files/multi-transform2.xsl" time="221">
            <profile>
              <template rank="1" match="/" name="" mode="" calls="20" time="21" average="1"/>
            </profile>
            <document>
              <root>
                <prev_pass>1</prev_pass>
                <pass2>2</pass2>
              </root>
            </document>
            <params>
              <param name="pass" value="2"/>
            </params>
          </stylesheet>
        </profiler>

        Example of using profiler you can see in directory "examples/profiler".

METHODS
  new
        my $xsltproc = XML::LibXSLT::Processor->new(%options);

    Creates instance of the XSLT processor.

    Valid options are:

    *   stylesheet_max_depth [ = 250 ]

            my $xsltproc = XML::LibXSLT::Processor->new(
                stylesheet_max_depth => 1000
            );

        This option sets the maximum recursion depth for a stylesheet.

    *   stylesheet_caching_enable [ = 1 ]

            my $xsltproc = XML::LibXSLT::Processor->new(
                stylesheet_caching_enable => 1
            );

        Set this option to "1" to enable stylesheet caching.

    *   document_caching_enable [ = 1 ]

            my $xsltproc = XML::LibXSLT::Processor->new(
                document_caching_enable => 1
            );

        Set this option to "1" to enable XML document caching.

    *   keys_caching_enable [ = 1 ]

            my $xsltproc = XML::LibXSLT::Processor->new(
                keys_caching_enable => 1
            );

        Set this option to "1" to enable keys caching.

    *   profiler_enable [ = 0 ]

            my $xsltproc = XML::LibXSLT::Processor->new(
                profiler_enable => 1
            );

        Set this option to "1" to enable collection the profile information.

    *   profiler_stylesheet [ = undef ]

            my $xsltproc = XML::LibXSLT::Processor->new(
                profiler_stylesheet => 'profiler.xsl'
            );

        If parameter is specified, the profile information added with this
        template in the resulting HTML document.

    *   profiler_repeat [ = 1 ]

            my $xsltproc = XML::LibXSLT::Processor->new(
                profiler_repeat => 1
            );

        This option sets the number of repeats transformations.

  transform(xml, stylesheet => \%params, stylesheet => \%params, ...)
        my $xml = XML::LibXML->load_xml(location => 'foo.xml');
        my $result = $xsltproc->transform($xml, 'bar.xsl');
        print $result->output_string();

        my $result = $xsltproc->transform('foo.xml', 'bar.xsl' => { param => 1 });
        print $result->output_string();

        my $result = $xsltproc->transform('<root/>', 'bar.xsl' => { param => 1 });
        print $result->output_string();

        my $result = $xsltproc->transform('<root/>', 'bar.xsl' => { param => 1 }, 'bar.xsl' => { param => 2 });
        print $result->output_string();

    Transforms the passed in XML document, and returns
    XML::LibXSLT::Processor::Result.

    Paramaters are:

    *   xml

        XML document may be specified as an XML::LibXML::Document object, a
        file name or a string.

    *   stylesheet

        Stylesheet file name.

XSLT FUNCTIONS
    The namespace for XSLT functions is "http://xsltproc.org/xslt/string".

  str:join((node-set|string), ..., sep)
    Returns a string created by concatenating the string arguments and using
    the sep argument as the separator.

        Example: str:join('str1', 'str2', ' ')
        Result: 'str1 str2'

        Example: str:join('str1', /root/string, 'str4', ', ')
        XML: <root><string>str2</string><string>str3</string></root>
        Result: 'str1, str2, str3, str4'

  str:uc(string)
    Converts the string argument to upper-case.

  str:lc(string)
    Converts the string argument to lower-case.

  str:trim(string)
    Removes whitespaces and other predefined characters (\t, \r, \n) from
    both sides of a string.

  str:ltrim(string)
    Removes whitespaces and other predefined characters (\t, \r, \n) from
    the left side of a string.

  str:rtrim(string)
    Removes whitespaces and other predefined characters (\t, \r, \n) from
    the right side of a string.

AUTHOR
        Yuriy Ustushenko, <<yoreek@yahoo.com>>

COPYRIGHT AND LICENSE
    Copyright (C) 2013 Yuriy Ustushenko

    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.