# phpman > perldoc > RPC::XML::ParserFactory

## NAME
    [RPC::XML::ParserFactory](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML%3A%3AParserFactory/markdown) - A factory class for [RPC::XML::Parser](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML%3A%3AParser/markdown) objects

## SYNOPSIS
        use [RPC::XML::ParserFactory](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML%3A%3AParserFactory/markdown);
        ...
        $P = [RPC::XML::ParserFactory](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML%3A%3AParserFactory/markdown)->new();
        $P->parse($message);

## DESCRIPTION
    The [RPC::XML::ParserFactory](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML%3A%3AParserFactory/markdown) class encapsulates the process of creating parser objects that
    adhere to the interface described in [RPC::XML::Parser](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML%3A%3AParser/markdown). Under the hood, the parser object created
    and returned could be from any of a number of implementation classes.

## IMPORT-TIME ARGUMENTS
    You can specify a particular underlying parser class to use, if you do not want
    [RPC::XML::ParserFactory](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML%3A%3AParserFactory/markdown) to use the default class. This is done with the "class" keyword:

        use [RPC::XML::ParserFactory](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML%3A%3AParserFactory/markdown) (class => '[XML::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AParser/markdown)');

    The value may be the name for any of the built-in classes, or it may be the name of a class that
    inherits from [RPC::XML::Parser](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML%3A%3AParser/markdown) (and can thus be "manufactured" by the factory). The value is
    saved and becomes the default class for any calls to new that do not explicitly name a class to
    use.

    Note that if the specified class is not valid, this is not tested until the first call to new,
    at which point an invalid class will cause an exception (error) to occur. The constructor will
    return "undef" and the $[RPC::XML::ERROR](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML%3A%3AERROR/markdown) variable will contain the error message.

### Names of Built-In Parsers
    The following names are valid when specified as the value of the "class" argument described
    above:

    [XML::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AParser/markdown)
    [xml::parser](https://www.chedong.com/phpMan.php/perldoc/xml%3A%3Aparser/markdown)
    xmlparser
        All of these specify the parser implementation based on the [XML::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AParser/markdown) module. This is the
        default parser if the user does not specify any alternative.

    [XML::LibXML](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML/markdown)
    [xml::libxml](https://www.chedong.com/phpMan.php/perldoc/xml%3A%3Alibxml/markdown)
    xmllibxml
        These specify a parser implementation based on the [XML::LibXML](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML/markdown) module. This is a new parser
        and not as well-vetted as the previous one, hence it must be explicitly requested.

## SUBROUTINES/METHODS
    The methods are:

### new
        Create a new instance of the class. Any extra data passed to the constructor is taken as
        key/value pairs (not a hash reference) and attached to the object.

        This method passes all arguments on to the new() method of the chosen implementation class,
        except for the following:

        class NAME
            If the user chooses, they may specify an explicit class to use for parsers when calling
            new(). If passed, this overrides any value that was given at use-time (processed by
            import()).

## DIAGNOSTICS
    The constructor returns "undef" upon failure, with the error message available in the global
    variable $[RPC::XML::ERROR](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML%3A%3AERROR/markdown).

## BUGS
    Please report any bugs or feature requests to "bug-rpc-xml at rt.cpan.org", or through the web
    interface at <<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=RPC-XML>>. I will be notified, and
    then you'll automatically be notified of progress on your bug as I make changes.

## SUPPORT
    *   RT: CPAN's request tracker

        <<http://rt.cpan.org/NoAuth/Bugs.html?Dist=RPC-XML>>

    *   AnnoCPAN: Annotated CPAN documentation

        <<http://annocpan.org/dist/RPC-XML>>

    *   CPAN Ratings

        <<http://cpanratings.perl.org/d/RPC-XML>>

    *   Search CPAN

        <<http://search.cpan.org/dist/RPC-XML>>

    *   MetaCPAN

        <<https://metacpan.org/release/RPC-XML>>

    *   Source code on GitHub

        <<http://github.com/rjray/rpc-xml>>

## LICENSE AND COPYRIGHT
    This file and the code within are copyright (c) 2011 by Randy J. Ray.

    Copying and distribution are permitted under the terms of the Artistic License 2.0
    (<<http://www.opensource.org/licenses/artistic-license-2.0.php>>) or the GNU LGPL 2.1
    (<<http://www.opensource.org/licenses/lgpl-2.1.php>>).

## CREDITS
    The XML-RPC standard is Copyright (c) 1998-2001, UserLand Software, Inc. See
    <<http://www.xmlrpc.com>> for more information about the XML-RPC specification.

## SEE ALSO
    [RPC::XML](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML/markdown), [RPC::XML::Client](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML%3A%3AClient/markdown), [RPC::XML::Server](https://www.chedong.com/phpMan.php/perldoc/RPC%3A%3AXML%3A%3AServer/markdown), [XML::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AParser/markdown)

## AUTHOR
    Randy J. Ray "<<rjray@blackperl.com>>"

